2013-03-31 3 views
0

У меня проблема с получением информации о загрузке файла. Я только начинаю изучать Rails.Rails form file upload newbie issue

Я использую рубин 2.0.0p0 И Rails 4.0.0.beta1

Вот моя форма:

<%= form_for(@person, :html => { :multipart => true }) do |f| %> 
<div class="field"> 
    <%= f.label :photo %><br /> 
    <%= f.file_field :photo %> 
</div> 
<div class="actions"> 
    <%= f.submit %> 
</div> 
<% end %> 

И в моей person.rb модели:

def photo=(file_data) 
logger.debug("PHOTO") 
logger.debug(file_data) 
logger.debug("END OUTPUT PHOTO") 
unless file_data.blank? 
    @file_data = file_data 
    self.extension = file_data.original_filename.split('.').last.downcase 
end 
end 

Я вижу на моей консоли, что ничего не происходит (нет вывода «PHOTO»), метод фотографии никогда не вызывается. Почему?

Когда я посмотрел в консоли я также видел эту линию, которая получила меня беспокоит:

Unpermitted parameters: photo 

Что это значит?

+2

Если вы только начинаете изучать Rails, я бы не стал с помощью бета-Rails 4, пока не будет официально выпущен. Точная проблема, с которой вы столкнетесь, скорее всего, не произошла бы в Rails 3.2. –

+0

Вы правы. Наверное, я не обратил внимания, когда я установил Rails. Я попытаюсь вернуться к 3 (моя учебная книга для Rails 3 в любом случае) –

ответ

3

В контроллере, где вы имеете дело с params, вам нужно использовать .permit в список атрибутов формы разрешено размещать:

@person = Person.new(params.require(:person).permit(:photo)) 

В качестве альтернативы, если вы использовали генератор люльки Rails', вы вместо этого может иметь person_params метод, где вам нужно будет добавить атрибут :photo:

def person_params 
    params.require(:person).permit(:photo, :name, etc...) 
end 
+0

Да, нашел. Делает большой смысл. Спасибо. –