我想在新地方插入标签。给这些标签是不同的模型。
####### models ##########
class Tag < ActiveRecord::Base
belongs_to :place
attr_accessible :tag
end
class Place < ActiveRecord::Base
has_many :tags
end
如何在新的Place创建表单中处理此问题?和places_controller中的创建动作?这样我就可以插入新的地方和mant标签,然后将产品ID分配给每个标签。
####### place controller ##########
def create
@place = Place.new(params[:place])
@tag = Tag.new(params[:?????]) #this should be more than once
respond_to do |format|
if @place.save
format.html { redirect_to @place, notice: 'Place was successfully created.' }
format.json { render json: @place, status: :created, location: @place }
else
format.html { render action: "new" }
format.json { render json: @place.errors, status: :unprocessable_entity }
end
end
end
####### place new form ##########
<%= form_for @place do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :description %><br />
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.label :rank %><br />
<%= f.text_field :rank %>
</div>
<div class="field">
<%= f.label :lat %><br />
<%= f.text_field :lat %>
</div><div class="field">
<%= f.label :lng %><br />
<%= f.text_field :lng %>
</div>
<div class="field">
<%= f.label :address %><br />
<%= f.text_area :address %>
</div>
<div class="field">
<%= f.label :website %><br />
<%= f.text_field :website %>
</div>
<div class="field">
<%= f.label :phone %><br />
<%= f.text_field :phone %>
</div>
<div class="field">
<%= label_tag "tags" %>
<%= f.text_field :tag %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:1)
如果你想自己做,你应该看一下accepts_nested_attributes_for
,其中有一篇由Ryan Bates撰写的精彩的2部分教程railscasts.com
如果您不想自己动手,可以使用多种标签宝石,例如: ActsAsTaggableOn
答案 1 :(得分:0)
在表单中添加:
<%= f.fields_for :tags do |t| %>
<%= t.label :name %>
<%= t.text_field :name %>
<% end %>
在Place
模型中:
accepts_nested_attributes_for :tags
在您的控制器中,您甚至不必担心创建标签。
您仍然应该尝试阅读有关fields_for
和accepts_nested_attributes_for
的内容,因为您的问题很常见,所以它们通常很有用。