2016-04-13 74 views
0

我想寫對於那些喜歡這個相互關聯的2種不同型號的數據:如何製作兩種相關模型的一種形式?

當然
class Post < ActiveRecord::Base 
    has_many :roads 
    accepts_nested_attributes_for :roads, :allow_destroy => true 
end 

class Road < ActiveRecord::Base 
    belongs_to :post 
end 

的去路表中有一個「POST_ID列」。我在後視圖中的form_for看起來像這樣

<%= form_for @post do |f| %> 

    <div class="form-group"> 
    <%= f.label :Tu_Nombre %> 
    <%= f.text_field :creador, class: "form-control" %> 
    </div> 


    <div class="form-group"> 
    <%= f.label :año %> (Cuando fue tu experiencia?) 
    <%= f.text_field :año, class: "form-control" %> 
    </div> 

    <div class="form-group"> 
    <%= fields_for :roads do |r| %> 
     <%= r.label :principio %> (desde?) 
     <%= r.text_field :principio, class: "form-control" %> 

     <%= r.label :final %> (hasta?) 
     <%= r.text_field :final, class: "form-control" %> 
    <% end %> 
    </div> 

    <div class="form-group"> 
    <%= f.label :historia %> (Cuentanos la historia de tu viaje!) 
    <%= f.text_area :historia, class: "form-control", size: "50x15" %> 
    </div> 

    <div> 
    <%= f.submit class: "btn btn-success" %> 
    </div> 

<% end %> 

最後我posts_controller創建方法

def create 
@post = Post.new(post_params) 

    if @post.save 
    redirect_to @post, notice: 'Post was successfully created.' 
    else 
    render :new 
    end 
end 

與私營

def post_params 
    params.require(:post).permit(:historia, roads_attributes: [:pricipio, :final, :post_id]) 
end 

的後提交,如果我檢查控制檯所有郵政的屬性已經保存了,但是用於道路的屬性卻沒有。我怎樣才能使用這兩個模型的一個表單兩個記錄,並且post_id得到註冊,所以我可以關聯表?

非常感謝!

回答

0

更新您的posts_controller new包含的方法.build

def new 
    @post = Post.new 
    @post.roads.build 
end 
+0

中錯過了@ post.roads.build差不多..它爲我工作@ post.roads.build ... –

0

請閱讀Rails指南的Form Helpers章節中的Nested Forms。您可以使用fields_for爲您的roads構建嵌套屬性表單並允許像示例一樣嵌套屬性。下面是一個來自Rails指南的例子,你可以嘗試自己弄清楚。

_form.html.erb

<%= form_for @person do |f| %> 
    Addresses: 
    <ul> 
    <%= f.fields_for :addresses do |addresses_form| %> 
     <li> 
     <%= addresses_form.label :kind %> 
     <%= addresses_form.text_field :kind %> 

     <%= addresses_form.label :street %> 
     <%= addresses_form.text_field :street %> 
     ... 
     </li> 
    <% end %> 
    </ul> 
<% end %> 

在people_controller.rb

def person_params 
    params.require(:person).permit(:name, addresses_attributes: [:id, :kind, :street]) 
end 
+0

嘿,謝謝,有解決方案,我在posts_controller –

0

許可證嵌套屬性附上您的fields_for父表單生成器,像這樣:

<%= f.fields_for :roads do |r| %>