6

Acts_as_taggable_onを使用して、2つの異なる「タイプ」のタグ(セクターカテゴリと無料のタグ付け)をCompanyモデルに割り当てたいと思います。NB:私はRoRに不慣れです!

これは、標準のテキスト入力フィールドを使用するだけで簡単に実行できますが、1つのタイプ(事前定義された固定セクターカテゴリタグ)でチェックボックスを使用して、ユーザーが入力フィールドにカンマ区切りのタグを追加できるようにします。 。

私はこの問題をさまざまな方法で試してきました...この質問に触発されたもの...しかし私はそれを機能させることができません

これが私がこれまでに持っているものです:

# models/company.rb
class Company ...
  acts_as_taggable_on :tags, :sectors

  has_many :taggings,
           :as => :taggable,
           :include => :tag,
           :class_name => "ActsAsTaggableOn::Tagging",
           :conditions => { :taggable_type => "Company" }

  has_many :sector_tags, 
           :through => :taggings, 
           :source => :tag,
           :class_name => "ActsAsTaggableOn::Tag",
           :conditions => {:context => "sectors"}
end

フォームで(simple_form gemを使用)私は...

# views/companies/_form.html.haml
= simple_form_for @company do |f|
  = f.input :name
  = f.association :sector_tags, :as => :check_boxes, :hint => "Please click all that apply"
  = f.input :tag_list
  = f.button :submit, "Add company"

そして私の会社のコントローラーには

# controllers/companies_controller.rb
def create
  @company = current_user.companies.build(params[:company])
  if @company.save
  ...
end

ただし、これにより検証エラーが発生します。

ActiveRecord::RecordInvalid in CompaniesController#create
Validation failed: Context can't be blank

誰かが私がこれを正しく行う方法を示唆できますか?

関連する質問は、これがそれを行うための良い方法であるかどうかです。ジョイントモデルを介してセクタータグを割り当てるためにカテゴリモデルを使用する方がよいでしょうか?

ありがとう!

4

2 に答える 2

7

さて、私は自分の問題を解決しました。そして、それは非常に単純であることが判明しました。残念ながら、私は共同の「セクター化」テーブルを介して別のセクターモデルを作成することになりました。しかし、誰かが興味を持っているなら、私は上記のケースで私がしたことを更新したかっただけです...

私の会社のモデルでは

# models/company.rb
class Company ...
  acts_as_taggable_on :tags, :sectors
...
end

フォームで

# views/companies/_form.html.haml
= simple_form_for @company do |f|
  = f.input :name
  = f.input :sector_list, :as => :check_boxes, :collection => @sectors, :hint => "Please check all that apply"
  = f.input :tag_list
  = f.button :submit, "Add company"

と会社のコントローラーで(作成)

# controllers/company_controllers.rb
def new
  @company = Company.new
  @sectors = get_sectors
end

def get_sectors
  sectors = []
  for sector in Company.sector_counts
    sectors << sector['name']
  end
  return sectors
end
于 2011-02-02T11:16:45.970 に答える
1

act_as_taggable_onは単一テーブル継承を使用しているように見えるため、実際には追加のテーブルを作成する必要はありません。ただし、次のように(彼らが決して述べていない)彼らの慣習に従う必要があります。

//add to model
attr_accessible :yourfieldname_list
acts_as_taggable_on :yourfieldname

//view
<%= f.text_field :yourfieldname_list %>
于 2013-05-29T04:13:50.133 に答える