2016-04-13 72 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| %>