Rails,自定义控制器方法你使用一两种方法吗?

时间:2011-11-23 23:06:01

标签: ruby-on-rails ruby-on-rails-3

我的应用有两种型号:Group& GroupMembers

在GroupMembers控制器中,我有一个方法leave_group

我在get上使用leave_group方法填充对话框进行确认。然后在帖子上我回复相同的方法。

这是正确的方法吗?使用一种方法来获取和放置?或者你创造了两个?

如果你应该使用一种方法,你知道哪种方法在哪个内?

由于

2 个答案:

答案 0 :(得分:2)

如果你必须这样做,肯定使用两种方法。在控制器中使用逻辑来根据请求类型确定要执行的操作将使您的应用程序在出现问题时很难调试。另外,如果你开始在这个地方开始这样做,你很快就会忘记你是如何设计它的。

我总是尽可能遵循REST模式。这使得您无需考虑控制器在每个操作中所执行的操作。 REST并不总是最佳选择,在您的情况下可能也是如此。如果你真的必须打破这种模式,我会将每种方法命名为它正在做的事情。如果只是回复一条消息,请将其称为leave_group_confirm_message或类似的内容。另一个你可以调用leave_group,因为这是它正在执行的操作。

答案 1 :(得分:0)

使用2种方法,但根据路径文件中的请求类型进行路由。这基本上是标准的new和create方法所做的 - 相同的端点,但是一个需要get,一个帖子。

所以,像这样:

match "membership_details" => "group_members#show", :via => :get
match "membership_details" => "group_members#leave_group", :via => :post

您还可以将成员资格转换为您可以明确获得的多对多关系(您的第一种方法)和删除(您的第二种方法)。不是说这是正确的方法,但值得考虑。

在这种情况下,您可以执行以下操作:

resources :users do 
    resources :membership :only => [:show, :destroy]
end