1

誰かがオブジェクト編集パスに移動した場合、form_forフィールドにデータが入力されることを理解しています。ほとんどの鉱山は、別のテーブルとのhas_many:through関係を持つこの1つのフィールドを除いて実行します。作成時に入力した使用法を事前に入力するにはどうすればよいですか?

例えば...

        <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

タグフィールドにデータを入力するにはどうすればよいですか?ありがとう

4

2 に答える 2

2

必要なのは、フォームにネストされたfields_forです。詳細はこちらhttp://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

さらに良いことに、ライアン・ベイツがリリースしたばかりのこの素晴らしいスクリーンキャストをチェックしてくださいhttp://railscasts.com/episodes/196-nested-model-form-revised

于 2012-04-20T05:39:45.983 に答える
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

于 2012-04-24T06:39:25.190 に答える