如何忽略Action Rails 4.0上的方法set_x创建自定义操作

时间:2014-01-11 21:54:28

标签: ruby-on-rails ruby-on-rails-4

在Rails 4中有一个duvid,因为创建了一个名为“get_json”的自定义Action

  def get_json

    @step_recipes = StepRecipe.all
    respond_to do |format|
      format.json render: @step_recipes
    end
  end

并将其添加到路线:

  get "step_recipes/get_json" => "step_recipes#get_json"

问题在于Rails 4中的回调,因为我尝试打开此路由并收到错误Couldn't find StepRecipe with id=get_json,并且拥有:

Parameters:

{"id"=>"get_json"}

我现在想要如何在控制器中忽略这个方法set_x,如何创建自定义操作并且没有问题呢?非常感谢。

1 个答案:

答案 0 :(得分:1)

如果你查看你的routes.rb文件,你可能会在你为get_json添加的自定义路线之上的某个地方有这样的条目:

resources :step_recipes

除此之外,还增加了一条等同于此的路线:

get "step_recipes/:id" => "step_recipes#show"

由于该路线首先与您的网址匹配,因此在您有可能到达get_json行之前,它会将请求路由到#show操作,并将:id参数设置为相等get_json

您需要将路线重命名为其他内容以避免冲突。试试这个:

get "get_json/step_recipes" => "step_recipes#get_json"

您需要确保在添加自定义路由时,您不会与已存在的任何其他路由匹配。