2012-04-02 104 views
0

我已经阅读了大量文档,并且由于某些原因,这仍然不清楚。rails 3:需要说明哪些控制器需要用于HABTM关系

我通过用户和事件上的HABTM关系定义了以下设置,用户表,事件表和M2M表Events_Users。当用户在事件索引或显示页面上注册事件时,是否应该转到为Events_Users创建的控制器中的新操作?如果是这样,是否应该转到仅用于将参数传递给创建操作的New操作?还是应该直接进行创建操作?

任何关于最佳实践的澄清将不胜感激!

感谢

回答

0

我想,有办法做到这一点可能是以下几点:

我会接受的情况下让用户为嵌套资源是这样的:

class Event < ActiveRecord::Base 
    has_many :users 
    accepts_nested_attributes_for :events 
end 

这你可以这样在EventsController中定义一个自定义动作:

class ApplicationController < ActionController::Base 
    def add_user_to_event 
    @event = Event.find(params[:event]) 
    @user = User.find(params[:user]) 
    @event.users << @user 
    @event.save 
    end 
end 

并且在您的表单中,您将有一个link_to与当前事件和用户作为参数的此操作。

+0

感谢您的回复,所以如果我将这个功能添加到EventsController中,当我需要从另一个对象引用它时会发生什么?我如何决定将它放在EventsController而不是UsersController上?甚至是一个独特的控制器EventsUsersController?那是我感到困惑的地方 – turbo2oh 2012-04-04 13:30:42

+0

在用户控制器中定义的这个动作只指出你定义一个名为/ events/add_user_to_event的路由。你应该可以从任何你喜欢的地方调用这条路线。 我认为你提到的选择只是一个偏好问题:你是从用户视图还是从事件视图添加事件?随你便。您甚至可以在UsersController下定义另一个操作调用add_event_to_user,这相反。 – bruno077 2012-04-04 13:36:21

+0

嗯所以这种东西真的没有最佳实践?我觉得它必须提出很多。 – turbo2oh 2012-04-06 00:18:09