我应该把代码放在哪里?

时间:2011-10-01 16:24:45

标签: ruby-on-rails

我有模型User和StoredItem:

class UserData < ActiveRecord::Base
  has_many :stored_items, :dependent => :destroy
end

class StoredItem < ActiveRecord::Base
  belongs_to :user
  named_scope :lookup, lambda { |id| { :conditions => ['qid = ?', id]}}
end

我需要有两种方法来为当前用户添加和删除项目到StoredItem。我把这段代码放到用户模型:

class UserData < ActiveRecord::Base
  has_many :stored_items, :dependent => :destroy

  def save_item(params)
    if(!self.stored_items.lookup(params[:qid]).exists?)
      item = self.stored_items.new(:sid => params[:qid],
                                   :name => params[:qti],
                                   :url => params[:qur],
                                   :group_id => params[:title],
                                   :rating => Integer(params[:rating]))
      item.save
    end
  end

  def remove_item(qid)
    item = self.stored_items.lookup(qid).first()
    item.destroy
  end
end

所以这是StoredItem控制器:

def save_item
  @user = UserData.find_by_login(session[:cuser])
  @user.save_item(params)
  # ...
end

这是一个很好的架构决策,还是将此代码放到StoredItem模型并将当前用户传递给它会更好?

1 个答案:

答案 0 :(得分:2)

这是一个很好的架构决策。您需要将其保留在用户中,因为User是StoredItem的所有者。用户负责存储的项目,而不是相反。