Rails 4中的Simple_form嵌套属性

时间:2016-03-03 16:48:34

标签: ruby-on-rails-4 nested-attributes simple-form-for

已经过了一个星期,我仍然在努力创建一个更新相关模型的新表单。我已经阅读了很多有类似问题的帖子,并在内部杀了我。

相同的旧Gallery has_many :photosPhoto belongs_to :gallery 我已经嵌套了我的资源。当我提交表单时,我也会收到路由错误。

    resources :galleries do
        resources :photos do
        end
    end

我的accepted_nested_attribute_for :photos模型中已包含:gallery 我该如何为照片控制器编写新的创建方法?我应该使用.build而不是.create,我应该使用fields_for而不是form_for吗?我注意到rails 4正在使用强大的参数,所以我需要允许我的照片控制器内的图库。

对不起我们读过的人,观看了很多视频,即使我复制的代码代码仍然卡住了。

我的simple_form不断出现各种错误:

    <%= simple_form_for :photos, html:{multipart: true} do |f| %>
      <%= f.input :position, collection: 1..10 %>
      <%= f.input :publish %>
        <%= f.input :caption, placeholder:"Please insert caption here", label:false %>
        <%= f.input :image, label:false %>
        <%= hidden_field_tag 'user_id', current_user.id  %>
        <%= hidden_field_tag 'gallery_id', gallery.id %>
        <%= f.button :submit %>
    <% end %>

我的目标是将我的画廊ID传递给我的照片。这是我的计划:

create_table "photos", force: :cascade do |t|
  t.text     "caption"
  t.string   "image_file_name"
  t.string   "image_content_type"
  t.integer  "image_file_size"
  t.datetime "image_updated_at"
  t.integer  "gallery_id"
  t.datetime "created_at",         null: false
  t.datetime "updated_at",         null: false
  t.integer  "position"
  t.boolean  "publish"
end
create_table "galleries", force: :cascade do |t|
  t.string   "title"
  t.text     "description"
  t.datetime "created_at",         null: false
  t.datetime "updated_at",         null: false
  t.string   "image_file_name"
  t.string   "image_content_type"
  t.integer  "image_file_size"
  t.datetime "image_updated_at"
  t.integer  "user_id"
  t.string   "tag"
  t.boolean  "publish"
end

1 个答案:

答案 0 :(得分:0)

因此,您有一个用于在图库中插入多张图片的图库表单,您需要从参数中获取图库。

首先在您的photos_controller.rb

def new
  @gallery = Gallery.find(params[:gallery_id)
  @gallery.photos.build
end

和您的表单,您应该使用cocoon或nested_form_fields(我的首选)

simple_form_for @gallery do |f|
  f.simple_fields_for :pictures do |p|
    p.input :title
    p.input :your_other_stuff

通过

将参数列入白名单
def params
  params.require(:gallery).permit(:gallery, :stuff, :in_here, pictures: [:pictures, :stuff, :in_here])
end