controller - Rails 3 - 如何从 View 触发方法/操作

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

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

我有用户、类(class)和订阅模型。用户 has_many :courses, :through => :subscription 和类(class) has_many :users, :through => :subscription。订阅属于两者。那部分,我完全理解。我使用订阅模型来存储用户和类(class)之间的关系状态(已完成、失败、删除、事件等)。

我还有这段创建关系的代码: @subscription = Subscription.create!(:course_id => @course.id, :user_id => current_user.id) 截至目前,我没有订阅 Controller ,因为它们主要通过类(class) View 进行管理(但我没有以某种方式进行设置,我只是想做得正确)。

我不明白的是如何/在哪里实现用户订阅类(class)的操作。 它应该是类(class) Controller 中的一个单独的操作,并带有您链接到的路线,还是有其他更好的方法来做到这一点?我想 AJAX 也是一种方法,但我不知道如何实现。

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

最佳答案

嗯,我知道怎么做了。

在我的订阅 Controller 中,我创建了 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我的 View 中的 helper 创建一个简单的表单,其中一个按钮指向我的订阅 Controller 上的创建操作:

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

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

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

它绝对可以清理,但就目前而言,它效果很好。

关于controller - Rails 3 - 如何从 View 触发方法/操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10455449/

相关文章:

java - 在initialize()中加载FXML

ruby-on-rails - 在 Rails 应用程序中,组织非模型实用程序类的 Rails 方式是什么?

ruby-on-rails - 模型范围正在破坏 rake db :migrate - rails 3. 2.3 postgres 9.1.3

mysql - Rails 3.2.3 mysql 错误 "max_prepared_stmt_count"

security - Codeigniter 定义基本路径或退出

php - undefined variable : data (View: C:\cygwin64\home\hp\AddressBook\resources\views\Update\edit.blade.php)

ruby-on-rails - rails : Show all associated records on a has_many through association

Django:prefetch_相关结果按中间表的字段排序

ruby-on-rails - Rails 4 嵌套表单,带有 has_many、through 和 multiple select