答えて
has_many :tags, :through => :post_tags, :conditions => ['tag.owner_id = ?' @owner.id]
タグを実行するときはどうなりますか?<< new_tag? – Neelesh
ここでも同じ問題があります。どのチュートリアルでも、Rails 3でその場で動作させる方法を見つけることはできません。 でも、結合モデルそのものを通して、あなたが望むものを得ることができます。
p = Post.new(:title => 'Post', :body => 'Lorem ipsum ...')
t = Tag.new(:title => 'Tag')
p.tags << t
p.save # saves post, tag and also add record to posttags table, but additional attribute is NULL now
j = PostTag.find_by_post_id_and_tag_id(p,t)
j.user_id = params[:user_id]
j.save # this finally saves additional attribute
かなり醜いですが、これは私の作品です。
それはうまくいくように見えますが、もっときれいな方法があります。私の答えを見てください:) –
このブログの記事は、完璧なソリューションを持っています:http://www.tweetegy.com/2011/02/setting-join-table-attribute-has_many-through-association-in-rails-activerecord/
ソリューションであること:作成し、あなたの「:モデルによる」手動ではなく、あなたがその所有者の配列に付加自動化された方法による。
このブログ記事の例を使用してください。あなたのモデルはどこにいる:
class Product < ActiveRecord::Base
has_many :collaborators
has_many :users, :through => :collaborators
end
class User < ActiveRecord::Base
has_many :collaborators
has_many :products, :through => :collaborators
end
class Collaborator < ActiveRecord::Base
belongs_to :product
belongs_to :user
end
は、以前は行っている可能性がありますproduct.collaborators << current_user
を。このアプローチは、あなたがすることができます
product.save && product.collaborators.create(:user => current_user, :is_admin => true)
:
しかし、むしろ配列に追加の自動化された方法よりも、(この例is_admin
で)追加の引数を設定するには、次のように手動でそれを行うことができます保存時に追加の引数を設定します。 NB。モデルがまだ保存されていない場合はproduct.save
が必要です。それ以外の場合は省略できます。
私は、3つのモデルを結合した結合テーブルを用意したいという同様の状況にありました。しかし、私は3番目のモデルIDを2番目のモデルから取得したかったのです。
class Ingredient < ActiveRecord::Base
end
class Person < ActiveRecord::Base
has_many :food
has_many :ingredients_food_person
has_many :ingredients, through: :ingredients_food_person
end
class Food
belongs_to :person
has_many :ingredient_food_person
has_many :ingredients, through: :ingredients_food_person
before_save do
ingredients_food_person.each { |ifp| ifp.person_id = person_id }
end
end
class IngredientFoodPerson < ActiveRecord::Base
belongs_to :ingredient
belongs_to :food
belongs_to :person
end
そして驚くべきことに、あなたはこのような何かを行うことができます。
food = Food.new ingredients: [Ingredient.new, Ingredient.new]
food.ingredients_food_person.size # => 2
food.save
が最初に私は私が保存する前に、私は#ingredientsを割り当てた後#ingredients_food_personへのアクセスを持っていないだろうと思いました。しかし、自動的にモデルを生成します。
- 1. has_many throughのチェックボックス、追加の結合テーブル属性を持つ
- 2. ルビー - - HAS_MANYを通じて表属性
- 3. 属性クラス名に「属性」を追加していますか?
- 4. 既存の属性をすべての属性セットに追加
- 5. Zend Form Elementsすべての属性を属性に追加
- 6. Rails - 属性を追加して配列に追加
- 7. RoR:アクセス:属性を介して
- 8. has_manyのは、フォーム内のテーブルの属性に参加
- 9. UITableViewControllerの属性を追加します。
- 10. の追加属性が
- 11. Datatables - td追加の属性
- 12. IE:XMLSerializerは、「xmlns:xml」属性を追加して「xml:lang」属性をシリアル化します。
- 13. ネストされた:has_manyの、:属性
- 14. カスタムレールhas_many association(pg配列を介して)
- 15. 属性を追加してonchangeイベントで属性を削除する方法は?
- 16. geomesa追加属性インデックスは
- 17. シンプルなXSLT属性追加
- 18. ノード属性[] IEの追加属性を与える配列
- 19. 新しいオプション要素に追加属性を追加し、hrefに属性を渡します
- 20. Magento 1.6 Soap v2の属性と追加の属性
- 21. リンクのonclick属性にコードを追加
- 22. Magentoの製品属性を追加
- 23. データテーブルの属性をにデータテーブルに追加
- 24. コンポーネントの属性を角型の事前コンパイルの属性に追加します
- 25. Magento属性と属性セットをプログラムで追加する
- 26. jqueryを使用してテキストボックスに属性を追加します
- 27. 追加(イベントを使用して)「タイトル」の要素に属性
- 28. Woocommerceクラスとして属性値の名前を追加
- 29. Magento:すべての製品に新しい属性を追加
- 30. コアデータのエンティティへの属性の追加
などの追加パラメータはありますか? – s84
モデルポスト、結合モデルPostTag、モデルタグがあります。投稿の関連タグを誰が作成したのかを指定したい。 – Neelesh
@Codeglotアソシエーションモデル自体には、2つのリンクされたオブジェクトのIDを超える追加の属性が潜在的に存在する可能性があります。 –