我有一个嵌套关联:
class User < ActiveRecord::Base
has_many :hostels
accepts_nested_attributes_for :hostels
end
class Hostel < ActiveRecord::Base
belongs_to :user
end
表格:
<%= form_for @user do |f| %>
<%= f.label :email %><br>
<%= f.text_field :email %>
<% f.object.hostels << @hostel -%>
<%= f.fields_for :hostels do |ff| %>
<%= ff.hidden_field :id %>
<% end -%>
<%= f.submit %>
<% end -%>
控制器
def create
@user = User.new(user_params)
raise @user.hostels.inspect
end
private
def user_params
params.require(:user).permit(:email, hostels_attributes: [:id])
end
我想通过更新宿舍外键将现有的宿舍记录重新链接到新用户。这样,它肯定不起作用。
尝试嵌套update_only: true
参数。
关于这个主题的任何想法,或者我是否完全错误地尝试这样的操作?
答案 0 :(得分:0)
你可以在你的表格中使用多项选择,然后在控制器中你必须要求hostel_ids。
型号:
class User < ActiveRecord::Base
has_many :hostels
end
class Hostel < ActiveRecord::Base
belongs_to :user
end
表单:其中:name是您在多个选择中看到的内容
<%= form_for @user do |f| %>
<%= f.label :email %><br>
<%= f.text_field :email %>
<%= f.label "Hostels" %><br>
<%= select_tag :hotel_ids, options_for_select(Hostel.all.map{|h| [h.name, h.id]}), { :multiple => true } %>
<%= f.submit %>
<% end %>
控制器:
def create
@user = User.new(user_params)
end
private
def user_params
params.require(:user).permit(:email, hostel_ids)
end
我没有测试代码但必须运行良好。