2014-02-20 3 views
0

Я пытаюсь выполнить итерацию через вложенный хеш для доступа к двум отдельным полям. Это то, что я пытаюсь сделать:Rails4 итерация через вложенные параметры hash

  1. Проверьте, чтобы увидеть, если :is_cover_photo верно
  2. если :is_cover_photo это правда, то я хочу, чтобы вызвать метод обновления на @point_of_interest.

Я все время получаю сообщение об ошибке и не могу понять, как выполнить эту задачу.

Это ошибка я получаю: "no implicit conversion of Symbol into Integer"

Это в моем update методе point_of_interests_controller:

def update 
    @point_of_interest = PointOfInterest.find(params[:id]) 

    if @point_of_interest.update(params[:point_of_interest].permit(:title, :caption, :website, :summary, :latitude, :longitude, :cover_photo, albums_attributes: [:id, :cover_photo, :title, :is_cover_photo])) 
     params[:point_of_interest][:albums_attributes].each do |key, value| 
     value.each do |k, v| 
      if k[:is_cover_photo] && k[:cover_photo].blank? 
      @point_of_interest.update(:cover_photo => k[:cover_photo]) 
      end 
     end 
     end 
     redirect_to @point_of_interest 
    else 
     render 'edit' 
    end 
    end 

Вот являются параметрами, которые прошли:

{"utf8"=>"✓", 
"_method"=>"patch", 
"authenticity_token"=>"XGvgfxFHZKpiE8eGqc+55qOlSSk9LYFGdywWyABezXo=", 
"point_of_interest"=>{"title"=>"WolfieOne", 
"latitude"=>"33.577836", 
"longitude"=>"-85.074692", 
"caption"=>"CaptionOne", 
"website"=>"google.com", 
"summary"=>"This is a test summary.", 
"albums_attributes"=>{"0"=>{"title"=>"Album Uno", 
"cover_photo"=>#<ActionDispatch::Http::UploadedFile:0x000000113ae4c0 @tempfile=#<Tempfile:C:/Users/Samuel/AppData/Local/Temp/RackMultipart20140220-7188-4ptfo1>, 
@original_filename="Lighthouse.jpg", 
@content_type="image/jpeg", 
@headers="Content-Disposition: form-data; name=\"point_of_interest[albums_attributes][0][cover_photo]\"; filename=\"Lighthouse.jpg\"\r\nContent-Type: image/jpeg\r\n">, 
"is_cover_photo"=>"1", 
"id"=>"23"}, 
"1"=>{"title"=>"Album 2", 
"is_cover_photo"=>"0", 
"id"=>"24"}, 
"2"=>{"title"=>"The Best Album Alive", 
"is_cover_photo"=>"0", 
"id"=>"30"}}}, 
"commit"=>"Submit Wolfie", 
"id"=>"15"} 

Любая помощь по этому вопросу был бы весьма признателен.

Update

Это решило вопрос для меня: Благодаря Coenwulf

params[:point_of_interest][:albums_attributes].each do |key, value| 
    if value[:is_cover_photo] && value[:cover_photo].present? 
    @point_of_interest.update(:cover_photo => value[:cover_photo]) 
    end 
end 
+0

Какая строка выдает ошибку? – tyler

+0

если k [: is_cover_photo] && k [: cover_photo] .blank? – EighthEmperor

+0

Извините, что забыл упомянуть, что – EighthEmperor

ответ

0

Попробуйте заменить содержимое первого, если блок с:

params[:point_of_interest][:albums_attributes].each do |key, value| 
    if value[:is_cover_photo] && value[:cover_photo].present? 
    @point_of_interest.update(:cover_photo => value[:cover_photo]) 
    end 
end 
redirect_to @point_of_interest 

EDIT: Отредактировано для использования существующего? вместо пустого? основанный на комментариях OP.

+0

Это позволяет обновить обложку альбома, но @ point_of_interest's: cover_photo не обновляется. Любые идеи почему? – EighthEmperor

+0

Вы действительно хотите, чтобы вторая строка читала: if value [: is_cover_photo] && значение [: cover_photo] .present? – Coenwulf

+0

Да! Извините, я неправильно понял, как .blank? работал. Замена .blank? с .present? исправлена ​​моя проблема. – EighthEmperor

Смежные вопросы