【问题标题】:Rails 3 - How to trigger a method/action from viewRails 3 - 如何从视图中触发方法/动作
【发布时间】:2012-05-14 09:19:58
【问题描述】:

标题可能有点奇怪,但让我解释一下。

我有用户、课程和订阅模型。用户has_many :courses, :through => :subscription 和课程has_many :users, :through => :subscription。订阅属于两者。那部分,我完全理解。我正在使用订阅模型来存储用户和课程之间的关系状态(完成、失败、丢弃、活动等)。

我也有这个创建关系的代码: @subscription = Subscription.create!(:course_id => @course.id, :user_id => current_user.id) 到目前为止,我还没有订阅控制器,因为它们将主要通过课程视图进行管理(但我并没有设置哪种方式,我只是想把它做好)。

我不明白如何/在哪里实现用户订阅课程的操作。 应该是 Course 控制器中的一个单独的操作,其中包含您链接到的路由,还是有另一种更好的方法?我想 AJAX 也是一种方法,但我不知道如何实现。

我浏览了 Michael Hartl 的 rails 教程,在过去的几天里进行了一些谷歌搜索,甚至浏览了 Diaspora 的源代码(因为我尝试做的操作类似于与某人交朋友,尽管关联是不同的),但我似乎无法理解它。

【问题讨论】:

    标签: controller ruby-on-rails-3.2 has-many-through


    【解决方案1】:

    好吧,我想出了办法。

    在我的订阅控制器中,我创建了 create 方法,如下所示:

    def create
        @course = Course.find(params[:course_id])
        Subscription.create!( :user_id => current_user.id, :course_id => params[:course_id])
        redirect_to @course 
        flash[:notice] = "You're now subscribed to #{@course.name}! WooHoo!"
    end
    

    之后,我可以在我的视图中使用 button_to 帮助器创建一个简单的表单,其中一个按钮指向我的订阅控制器上的创建操作:

    <%= button_to "Subscribe!", subscriptions_path(:course_id => @course.id) %>

    当然,还需要在 routes.rb 中添加适当的操作:

    resources :subscriptions, :only => [:create, :update]

    肯定是可以清理的,不过暂时还挺好用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 2013-02-27
      • 2019-10-10
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多