【问题标题】:rails 3: clarification needed on which controllers are needed for HABTM relationshipsrails 3:需要澄清HABTM关系需要哪些控制器
【发布时间】:2012-04-02 15:05:44
【问题描述】:

我已经阅读了很多文档,但出于某种原因,我仍然不清楚。

我有以下设置,一个用户表、一个事件表和一个 M2M 表 Events_Users,通过用户和事件的 HABTM 关系定义。当用户在 Event Index 或 Show 页面上注册一个 Event 时,它是否应该转到为 Events_Users 创建的控制器中的 New 操作?如果是这样,它是否应该转到仅用于将参数传递给 Create 操作的 New 操作?还是应该直接执行创建操作?

任何关于最佳实践的说明将不胜感激!

谢谢

【问题讨论】:

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


    【解决方案1】:

    我认为一种方法可以是:

    我会接受以这种方式将用户作为嵌套资源的事件:

    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
    

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

    【讨论】:

    • 感谢您的回复,所以如果我将此功能添加到 EventsController 中,当我需要从另一个对象引用它时会发生什么?我如何决定将它放在 EventsController 而不是 UsersController 上?甚至是一个独特的控制器EventsUsersController?这就是我感到困惑的地方
    • 在用户控制器中定义这个动作只会让你定义一个名为 /events/add_user_to_event 的路由。你应该可以从任何你喜欢的地方调用这条路线。我认为您提到的替代方案只是一个偏好问题:您是从用户视图还是从事件视图添加事件?由你决定。你甚至可以在 UsersController 下定义另一个动作调用 add_event_to_user 来做相反的事情。
    • 嗯,所以真的没有关于这些东西的最佳实践吗?我觉得它必须出现很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2012-07-18
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多