我与照片和赞助商有很多关系。
创建新照片时,在new.html.erb视图中,我想添加赞助商属性(属于不同的模型,但与照片有关),但我不知道怎么做。
我想在照片创建视图中添加:sponsor_name,:sponsor_web 输入,因此我可以在创建新照片时添加照片所拥有的赞助商信息
我尝试在同一个视图中创建2个simple_forms,一个带有照片表属性,另一个带有赞助商属性,但没有用。
Mi view(new.html.erb)
<%= simple_form_for [current_user, @photo] do |f| %>
<%= f.button :submit, "Subir Spot"%>
<% end %>
我的照片#new Controller
def new
@photo = Photo.new
@sponsor = @photo.sponsors
end
答案 0 :(得分:2)
<强>嵌套强>
您希望在Photo
模型中使用accepts_nested_attributes_for
:
#app/models/photo.rb
class Photo < ActiveRecord::Base
has_many :sponsors
accepts_nested_attributes_for :sponsors
end
这使您能够使用nested
form:
#app/controllers/photos_controller.rb
class PhotosController < ApplicationController
def new
@photo = Photo.new
@photo.sponsors.build
end
def create
@photo = Photo.new photo_params
@photo.save
end
private
def photo_params
params.require(:photo).permit(:photo, :params, sponsors_attributes: [:name, :web])
end
end
#app/views/photos/new.html.erb
<%= form_for @photo do |f| %>
# Photo attributes here
<%= f.fields_for :sponsors do |s| %>
<%= s.text_field :name %>
<%= s.text_field :web %>
<% end %>
<%= f.submit %>
<% end %>
当您创建新的Sponsor
对象时,这将用于创建新的Photo
对象,从而使您能够传递嵌套的数据。
-
虽然这适用于has_many :through
关联,但在将has_and_belongs_to_many
与[other]_ids
一起使用时,您会要小心,就好像您只想关联两个模型一样,您将会这样做更好地填充新Photo
对象
如果您想了解更多信息,我可以详细说明