rails 3.2 создать ссылку для скачивания NoMethodError

Я пытаюсь загрузить файлы в своем приложении rails. Я видел Как создать ссылку для скачивания и использовал ее в своем приложении. Но когда я пытаюсь скачать, я получаю эту ошибку:

NoMethodError in ConfsController#download
undefined method `xml' for nil:NilClass
app/controllers/confs_controller.rb:61:in `download'

Это confs_controller:

def download
  send_file @conf.xml.path, :type => @conf.xml_content_type, :filename => @conf.permalink
end

xml это мой файл. Это просто имя, подобное документу в примере. Теперь я понимаю, что эта ошибка появляется, потому что xml равен нулю. Но почему и как я могу это исправить?


person kalahari    schedule 09.09.2013    source источник
comment
что такое @conf? здесь это ноль в вашем случае, поэтому вы получили undefined method xml' для nil:NilClass`   -  person Rajarshi Das    schedule 09.09.2013
comment
На самом деле я так и думал, но если вы посмотрите на ссылку, которую я дал, вы увидите, что @thing используется таким же образом. Почему мой не работает? Должен ли я использовать себя или что-то в этом роде?   -  person kalahari    schedule 09.09.2013
comment
где находится ваш файл в файле отправки, вы должны указать этот путь в качестве первого параметра send_file '/path/to.jpeg', :type => 'image/jpeg', :disposition => 'inline' таким образом   -  person Rajarshi Das    schedule 09.09.2013
comment
Путь зависит от @conf.id :path => ":rails_root/downloads/:attachment/:id/:basename.:extension" Так что я не могу этого сделать   -  person kalahari    schedule 09.09.2013


Ответы (1)


Проблема не в xml, а в nil. Это потому, что @conf это nil. Следовательно, он не может найти xml для класса nil.

Пожалуйста, убедитесь, что вы определили объект @conf.

person Suresh G    schedule 09.09.2013
comment
Я поместил <%= link_to 'Download', download_conf_path(@conf) %> в show.html.erb, а @conf там не ноль. Как я могу назначить @conf в шоу @conf в контроллере? - person kalahari; 09.09.2013
comment
Я добавил @conf = Conf.find(conf_params) и conf_params вот такой: params.require(:conf).permit( :id, :xml, other attributes) if params[:conf] Теперь там написано Couldn't find Conf without an ID но Request Parameters: {"id"=>"6"} - person kalahari; 09.09.2013
comment
Я изменил @conf = Conf.find(conf_params) на @conf = Conf.find(params[:id]) и добавил :id => @conf.id на link_to в show.html.erb, теперь все работает, спасибо - person kalahari; 09.09.2013