我有三个模型都可以有评论,每个评论必须属于一个用户。我正在使用多态关联 :as => :reviewable 但我不确定我应该把为每个模型创建评论的逻辑放在哪里。我会假设每个评论的 CRUD 应该由 reviews_controller 处理(或嵌套属性?在其他控制器中?),但是我如何将评论与每个模型相关联?
我在谷歌上找不到任何模型/视图/控制器的例子,也许这对清理事情有很大帮助。
谢谢, 塞萨尔
我有三个模型都可以有评论,每个评论必须属于一个用户。我正在使用多态关联 :as => :reviewable 但我不确定我应该把为每个模型创建评论的逻辑放在哪里。我会假设每个评论的 CRUD 应该由 reviews_controller 处理(或嵌套属性?在其他控制器中?),但是我如何将评论与每个模型相关联?
我在谷歌上找不到任何模型/视图/控制器的例子,也许这对清理事情有很大帮助。
谢谢, 塞萨尔
在可审查对象的控制器中处理对象的问题在于,您会发现您最终会在每个控制器中重复大量相同的代码。此外,您将代码放在哪里?要么你最终使用一些非常繁重的动作方法(通过捎带你现有的 7 个动作),要么你开始创建像这样的动作
new_review, delete_review, etc
这不是 RESTful 并且是一种严重的代码气味,需要它自己的控制器。
因此,对于这样的事情,我会考虑有一个评论控制器,或者将参数添加到 url 或使用隐藏字段来指示评论属于哪个对象:
<%= f.hidden_field :reviewable_id, :value => @object.id %>
<%= f.hidden_field :reviewable_type, :value => @object.class %>
如果需要对评论对象进行任何其他工作(例如将当前用户保存为作者等),这尤其有用,因为它保留了所有无法推送到模型的逻辑在一个地方。只需确保正确确定关联模型的范围并确保它属于用户,否则用户可以篡改 URL 并将评论添加到他们想要的任何内容(当然,这适用于从用户提交的数据中选择对象的任何地方)。
但是,如果评论对象非常轻量级并且不需要任何额外的处理(即只需将发布的数据简单地分配给对象),那么您可能想看看使用 Rails 2.3 和它的嵌套对象支持.
由于它是对模型的更新,因此更容易通过模型的控制器。另外,没有错误评论属于哪个模型。
看看有什么acts_as_commentable
作用。重新调整用途可能比推出自己的用途更容易。
http://github.com/jackdempsey/acts_as_commentable/tree/master