我有模型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模型并将当前用户传递给它会更好?
答案 0 :(得分:2)
这是一个很好的架构决策。您需要将其保留在用户中,因为User是StoredItem的所有者。用户负责存储的项目,而不是相反。