0

我有一個嵌套的關聯關係:嵌套形式:更新子外鍵

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

您可以使用多重選擇爲您的酒店形式,然後在控制器中,您必須要求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 

我沒有測試的代碼,但必須工作得很好。