2015-09-14 60 views
-1

我有兩個表:如何通過form_for與rails在不同的表中保存關係數據?

a. people 
    id | name 
b. cards 
    id | person_id | number 

應用/型號:

# app/models/person.rb 
class Person < ActiveRecord::Base 
    has_many :cards, foreign_key: :person_id 
end 

# app/models/card.rb 
class Card < ActiveRecord::Base 
    belongs_to :people 
end 

現在,我想在一個頁面中節省的人,卡記錄:

# app/views/people/_form.html.erb 
<%= form_for(person, url: path) do |f| %> 
    <%= f.label :name % 
    <%= f.text_field :name %> 

    # How to do here about card model? 

    <%= f.submit 'Submit %> 
<% end %> 

那麼如何讓一個關係源,所以我可以同時保存這兩個記錄?

回答

1

你應該使用fields_for幫手:

<%= form_for(person, url: path) do |f| %> 
    <%= f.label :name % 
    <%= f.text_field :name %> 

    <%= f.fields_for :cards do |card_form| %> 
    <%= card_form.text_field :number %> 
    ... 
    <% end %> 

    <%= f.submit 'Submit %> 
<% end %> 

更新爲了使用這種形式與您的模型,你應該修改你的人的模型:

class Person < ActiveRecord::Base 
    has_many :cards 
    accepts_nested_attributes_for :cards 
end 

在你的控制器:

def person_params 
    params.require(:person).permit(cards_attributes: [:id, :number]) 
end 
+0

非常感謝。那麼如何在控制器中做?是否有必要在不同的控制器(app/controllers/people.rb,app/controllers/cards.rb)中保存? –

+0

你可以使用單控制器PeopleController來做這件事 – dimakura

+0

我在我的控制器的create方法中寫道:'@ person.cards.build(number:params [:person] [:cards] [:number])''。它可以將數據保存到數據庫,但它是否好? –

相關問題