簡體   English   中英

如何為兩個相關模型制作一張表格?

[英]How do i make one form for two related models?

我想為兩個彼此相關的不同模型編寫數據,如下所示:

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

class Road < ActiveRecord::Base
    belongs_to :post
end

當然,de roads表具有“ 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

該帖子已提交,如果我檢查控制台,則所有用於發布的屬性均已保存,但用於道路的屬性尚未保存。 我怎樣才能僅使用一種形式為這兩個模型制作兩個make記錄,並注冊post_id以便可以關聯表?

非常感謝!!

請閱讀Rails Guide中“表單幫助器中的嵌套表單”一章。 您可以使用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

將您的fields_for附加到父表單構建器,如下所示:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM