答えて
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. 既存の属性をすべての属性セットに追加
- 2. Rails - 属性を追加して配列に追加
- 3. Zend Form Elementsすべての属性を属性に追加
- 4. RoR:アクセス:属性を介して
- 5. 属性を追加してonchangeイベントで属性を削除する方法は?
- 6. シンプルなXSLT属性追加
- 7. ノード属性[] IEの追加属性を与える配列
- 8. ネストされた:has_manyの、:属性
- 9. カスタムレールhas_many association(pg配列を介して)
- 10. Magento 1.6 Soap v2の属性と追加の属性
- 11. jqueryを使用してテキストボックスに属性を追加します
- 12. Magentoの製品属性を追加
- 13. リンクのonclick属性にコードを追加
- 14. Magento属性と属性セットをプログラムで追加する
- 15. Magento:すべての製品に新しい属性を追加
- 16. コアデータのエンティティへの属性の追加
- 17. Pythonのインスタンスメソッドへの属性の追加
- 18. ベースイベントへの属性の追加
- 19. プロパティを追加して属性を拡張する
- 20. XSLTを使用してタグに属性を追加する
- 21. 属性を使用してメソッドにパラメータを追加する
- 22. xmllintを使用して属性を追加する
- 23. element.addを使用してLINQで属性を追加する
- 24. プロパティエディタを使用してクラスに属性を追加する
- 25. jspを使用してセッション属性にjavascript変数を追加
- 26. ApacheDSに 'memberOf'属性を追加する
- 27. json.netにカスタム属性を追加
- 28. フィードにカスタム属性を追加する
- 29. クラスにDebuggerStepThrough属性を追加する
- 30. DataColumnに属性を追加する
などの追加パラメータはありますか? – s84
モデルポスト、結合モデルPostTag、モデルタグがあります。投稿の関連タグを誰が作成したのかを指定したい。 – Neelesh
@Codeglotアソシエーションモデル自体には、2つのリンクされたオブジェクトのIDを超える追加の属性が潜在的に存在する可能性があります。 –