2012-04-20 72 views
1

我明白,如果有人轉到對象編輯路徑,form_for字段應該填充。除了這一個領域,大多數礦山都做得很好,這個領域與另一個桌子有一個has_many:關係。你如何預先填充創建時輸入的任何內容?如何在編輯頁面自動填充rails中的form_form標籤字段

例如...

 <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> 

我的課的內容將正確填充,但不是我的標籤領域。我有一個課表,標籤表和一個介入標籤關係表。

功課類是...

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 

我會得到怎樣的標籤字段來填充?謝謝

回答

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 -%> 

但是,這將顯示每個標記的文本字段。如果您想要爲所有標記使用單個文本字段(例如,用逗號分隔),並且還可以檢索按標記過濾的課程,則應檢查此寶石:acts-as-taggable-on

相關問題