据我所知,如果有人进入对象编辑路径,则应填充form_for字段。除了这一个字段之外,大多数地雷都会这样做,它与另一个表有一个has_many:through关系。如何在预先填充创建时输入的内容?
例如......
<div class="lesson_content">
<%= f.label :content %>
<%= f.text_area :content %>
</div>
<div class="tags">
<%= f.label :tag_names, "Tags" %>
<%= f.text_field :tag_names, data: { autocomplete_source: tags_path} %>
</div>
我的课程内容将正确填充,但不会填充我的代码字段。我有一个课程表,标签表和介入的tags_relationship表。
我的课程是......
class Lesson < ActiveRecord::Base
attr_accessible :title, :desc, :content, :tag_names
belongs_to :user
has_many :tag_relationships, :autosave => true
has_many :tags, :through => :tag_relationships, :autosave => true
如何填充标记字段?感谢
答案 0 :(得分:2)
您需要的是在表单中嵌套的fields_for。详情请见http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for
更好的是,看看Ryan Bates发布的这个精彩的截屏视频,他刚刚发布了http://railscasts.com/episodes/196-nested-model-form-revised
答案 1 :(得分:1)
您需要从课程课程中拨打accepts_nested_attributes_for
:
# app/models/lesson.rb
class Lesson < ActiveRecord::Base
attr_accessible :title, :desc, :content, :tag_names
belongs_to :user
has_many :tag_relationships, :autosave => true
has_many :tags, :through => :tag_relationships, :autosave => true
accepts_nested_attributes_for :tags
end
然后,在你的控制器/视图中:
# app/controllers/lessons_controller.rb
class LessonsController < ActiveSupport::Controller
def edit
@lesson = Lesson.find(params[:id])
end
end
<%= form_for(@lesson) do |f| %>
<div class="lesson_content">
<%= f.label :content %>
<%= f.text_area :content %>
</div>
<div class="tags">
<%- @lesson.tags.each do |tag| -%>
<%= fields_for(tag) do |t| %>
<%= t.label :name, "Tag" %>
<%= t.text_field :name, data: { autocomplete_source: tags_path} %>
<%- end -%>
<%- end -%>
</div>
<%- end -%>
但是,这会显示每个标记的文本字段。如果要对所有标记使用单个文本字段(例如,用逗号分隔),并检索按标记过滤的课程,则应检查此gem:acts-as-taggable-on。