自定义操作不使用link_to使用remote = true触发

时间:2012-11-26 04:28:40

标签: ruby-on-rails ruby-on-rails-3.2

非常新的ruby on rails并试图让我的第一个ajax调用工作。它正在进行ajax调用,但它总是调用#index操作,似乎忽略了URL参数。这是代码:

class UserController < ApplicationController
def flag
    logger.debug "in flag user"
    respond_to do |format|
      format.js { render :layout=>false }
    end
  end
end

在我的routes.db中:

resources :users do
    member do
      post 'flag'
      get 'flag'
    end
  end

然后在我看来,我创建了这样的链接:

<%= link_to "Flag User", :url => flag_user_path(user.id), :method => :get, :remote => true %>

HTML源代码为:

<a href="/users?method=get&amp;url=%2Fusers%2F1%2Fflag" data-remote="true">Flag User</a>

rake路由产生了这个:

flag_user  POST   /users/:id/flag(.:format)   users#flag
           GET    /users/:id/flag(.:format)   users#flag

每当我点击链接时,总是会执行用户#index方法。如何让用户#flag方法执行?

3 个答案:

答案 0 :(得分:1)

问题在于如何定义路线。它需要像这样,

resources :users do
  post 'flag'
  get 'flag', on: :member
end

检查导轨指南以获取更多信息。

答案 1 :(得分:1)

问题是:url符号。我改变了:

<%= link_to "Flag User", :url => flag_user_path(user.id), :method => :get, :remote => true %>

为:

<%= link_to "Flag User", flag_user_path(user.id), :method => :get, :remote => true %>

并且一切正常。我错误地使用它像link_to_remote,它需要:url符号。感谢大家的意见。

答案 2 :(得分:0)

如果你运行rake路线,我想你会看到用名称“flag_user_path”创建的路线需要“post”而不是“get”