即使未设置before_action,也会在操作之前调用方法

时间:2018-05-17 20:00:48

标签: ruby-on-rails

我有一个动作,它接受表单的输入,然后进行一些比较和数据库更新。之后,它会重定向到另一个动作。

如果用户遵循表单流,这可以正常工作,但我也希望通过转到控制器/结果,让用户直接访问结果操作。现在这会引发错误:

无法使用'id'= result

找到Preference

错误是因为它试图调用set_preferences()方法。但是,在结果操作之前不会调用该方法。

如何更新此用户可以直接导航到控制器/结果并且不需要id参数?

以下是当前流程:index-> new-> create-> test-> results

class PreferencesController < ApplicationController
  before_action :set_preference, only: [:show, :edit, :test, :update, :destroy]

  def test
    #stuff happens

    #redirect to results exploration page
    render action: "results"#
  end

  def results
    @results = Preference.all
  end

1 个答案:

答案 0 :(得分:2)

那是因为正在执行show动作。如果您检查日志,您将看到调用了PreferencesController#show。由于不是REST方法,您需要在routes.rb文件中定义它。类似的东西:

resources :preferences do
  get :results, on: :collection
end

GET /preferences/results调用正确的操作。