Итерация по Params Hash

У меня очень неприятное время, когда я загружаю некоторые изображения. Они, очевидно, загружаются как стойки/составные, но то, как я перебираю хеш параметров, должно вызывать проблему. Мне ДЕЙСТВИТЕЛЬНО не помешала бы помощь, чтобы перестать рвать на себе волосы.

Итак, у меня есть хэш params, который выглядит так:

Parameters: {"commit"=>"Submit", "sighting_report"=>[{"number_seen"=>"1", "picture"=>#<File:/var/folders/IX/IXXrbzpCHkq68OuyY-yoI++++TI/-Tmp-/RackMultipart.85991.5>, "species_id"=>"2"}], "authenticity_token"=>"u0eN5MAfvGWtfEzrqBt4qfrL54VJ9SGX0jFLZCJ8iRM=", "sighting"=>{"sighting_date(2i)"=>"6", "name"=>"", "sighting_date(3i)"=>"5", "county"=>"0", "notes"=>"", "location"=>"", "sighting_date(1i)"=>"2010", "email"=>""}}

Моя форма может иметь несколько отчетов о наблюдениях с несколькими изображениями в каждом отчете о наблюдениях. Вот мой код контроллера:

def create_multiple
    @report = Report.new
    @report.name = params[:sighting]["name"]
    @report.sighting_date = Date.civil(params[:sighting][:"sighting_date(1i)"].to_i, params[:sighting][:"sighting_date(2i)"].to_i, params[:sighting][:"sighting_date(3i)"].to_i)
    @report.county_id = params[:sighting][:county]
    @report.location = params[:sighting][:location]
    @report.notes = params[:sighting][:notes]
    @report.email = params[:sighting][:email]
    @report.save!
    @report.reload
    for sr in params[:sighting_report] do
        sighting = SightingReport.new
        sighting.report_id = @report.id
        sighting.species_id = sr[:species_id]
        sighting.number_seen = sr[:number_seen]
        sighting.save
        if sr[:picture]
            sighting.reload
            for pic in sr[:picture] do
                p = SpeciesPic.new
                p.uploaded_picture = pic
                p.species_id = sighting.species_id
                p.report_id = @report.id
                p.save!
            end
        end
    end
    redirect_to :action => 'new_multiple'
end

Кажется, я не могу получить доступ к самим данным изображения, но продолжаю получать доступ к какой-то строке. Однако это не имя файла, а какая-то странная вещь с экранированными символами. Что я могу сделать, чтобы получить доступ к фактическим данным?


person Joe Clark    schedule 06.06.2010    source источник
comment
Так какая у тебя проблема?   -  person John Topley    schedule 06.06.2010
comment
Извините, что не изложил мою проблему! Я изложил свой вопрос внизу поста.   -  person Joe Clark    schedule 07.06.2010


Ответы (1)


Вы должны использовать accepts_nested_attributes_for (как описано здесь: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

Это удалит всю сложность контроллера и позволит использовать некоторую магию Rails для обработки создания вложенных объектов. При этом все сохранения будут выполняться как одна атомарная транзакция.

person Patrick Klingemann    schedule 07.06.2010