0

私はモデルを持っUserていItemます。ユーザーはlikewantまたはownアイテムを使用できます。この関係をレールで作成するにはどうすればよいですか? この3つのアクションは今後増えるかもしれないので柔軟にしたいです。

私の英語でごめんなさい

アップデート

UserActionとという名前のモデルを作成しましたUserActionType

user.rbに追加しました

has_many :user_actions
has_many :actions, :through => :user_actions, :source => :user_action

def method_missing(method_id, *arguments)
    if match = /([_a-zA-Z]\w*)_it/.match(method_id.to_s)
      action_name = match[1]
      action_type = UserActionType.find_by_name(action_name)
      action = action_type.user_actions.new
      action.user = self
      action.item = arguments[0]

      action_type.save
      action.save

    elsif match = /find_my_([_a-zA-Z]\w*)s/.match(method_id.to_s)
      action_name = match[1]
      user_actions.joins('LEFT JOIN user_action_types ON user_action_types.id = user_actions.user_action_type_id').where('user_action_types.name = "'+ action_name +'"')
    else
      super
    end
  end

このように、、、、などown_itwant_itメソッドlike_itfind_my_likesありますfind_my_*

私の解決策についてどう思いますか?

4

2 に答える 2

1

through-associationを使用する方が良いと思います。

したがって、ユーザー モデルとアイテム モデルの間にモデルが作成されます。たとえば、user_item のように、タイプ (希望、所有など) を格納できます。

タイプを制御するために別のモデルが必要だとは思いません(欲しい、所有するなど)。この宝石Ambryを見てください。それを使用すると、「仮想データベース」を作成できます。

幸運を!

于 2013-05-03T17:08:37.497 に答える
0

has_and_belongs_to_many解決策は、 for each actionを使用することです。と の間にいくつかのhas_and_belongs_to_many関係を作成するには、オプションを使用する必要があります。UserItemclass_name

class User < ActiveRecord::Base

  has_and_belongs_to_many :liked_items, :class_name => 'Item'
  has_and_belongs_to_many :wanted_items, :class_name => 'Item'
  has_and_belongs_to_many :owned_items, :class_name => 'Item'

  #...
end
于 2013-05-03T17:07:11.730 に答える