Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未知操作错误_Ruby On Rails_Ruby On Rails 3_Action - Fatal编程技术网

Ruby on rails 未知操作错误

Ruby on rails 未知操作错误,ruby-on-rails,ruby-on-rails-3,action,Ruby On Rails,Ruby On Rails 3,Action,我已经在我的会员控制器中创建了一个自定义操作req,并为其定义了路由。但是,当我在link_to上给出该自定义操作的路径时,它会给我一个错误,表示未知操作,找不到MembershipsController的操作“show”。我不明白为什么在我提供自定义操作的路径时会查找show操作 以下是我在membership controller中的自定义操作 def req @user =User.find_by_email(params[:email]) @group =params[:grou

我已经在我的会员控制器中创建了一个自定义操作
req
,并为其定义了路由。但是,当我在link_to上给出该自定义操作的路径时,它会给我一个错误,表示未知操作,找不到MembershipsController的操作“show”。我不明白为什么在我提供自定义操作的路径时会查找show操作

以下是我在membership controller中的自定义操作

def req
  @user =User.find_by_email(params[:email])
  @group =params[:group_id]
  unless @group.nil?
    if Membership.request(@user.id, @group)
       redirect_to :back, :notice => 'Joined successfully.'
    else
      redirect_to :back,  :notice => 'couldnot Joine.'
    end
  end
end
我的会员资格控制器中没有显示操作

以下是我的自定义操作的路径:

resources :memberships do
  collection do
    post 'req'
  end
end
下面是我的
groups/show.html.haml
中的代码,其中我给出了自定义操作的路径

  - if @collegemates.empty?
    %p.info You have no common collegemates ...
  - else
    %table.datatable
      %thead
        %tr
          ...
      %tbody
        - @collegemates.each do |c|
          - unless Membership.group_member(c.id, @group)
            %tr
              %td= c.full_name
              %td= c.email
              %td= link_to "request to join",{:controller => :memberships, :action => "req",:email =>c.email,:group_id => @group.id},:method => "post"

当我点击“请求加入”时,我得到了“显示操作”的未知操作错误。我做错了什么?

您可能希望将您的操作分配给集合或成员

resources :memberships do
  post 'req', :on => :collection # or :member
end

:on=>:collection
创建一个类似于
会员资格/req
的路由,其中

:on=>:member
提供对象的路由,如
memberships/:id/req

,因为默认rails提供CRUD操作

new,create,edit,update,delete
代码

collection do
  post 'req'
end
将创建如下所示的路线

/memberships/req
所以rails误解了您正在请求/memberships/:id 并尝试匹配显示操作。由于没有显示操作,因此会引发未知操作

因此,解决方案是您需要告知您没有使用CRUD操作

可以按如下方式进行

resources :memberships, :only => [] do
 collection do
   post 'req'
 end
end

要使链接执行POST请求,需要javascript。Rails会为您解决这个问题,但您必须包含必要的文件。将
添加到布局文件将解决您的问题。如果不执行此操作,将执行GET请求而不是POST请求。

但他已经有了
集合do
,这与
:on=>:collection
相同。这与他已有的语法完全不同。啊,没有看到,因为错误的代码格式,你是对的,你有没有包括Rails的Java脚本?Rails使用javascript,因此您的链接执行post请求。如果没有包含javascript,则执行get请求,而不是post请求。如何包含此javascript…创建也是post请求,不是吗?我的创建操作运行良好,这意味着我的post请求正常。create可能正常工作,因为它是一个带按钮的普通表单。这是一个链接,因此您需要javascript使其成为帖子。您必须在布局文件的
标记中包含javascript,如下所示:
。您使用的Rails版本是什么?你能为你的
链接显示生成的html吗?如果这是生成的html,那就是你的javascript有问题。Rails 3.0.3还没有使用资产管道,因此您应该做的不是
,而是
,您在这个问题上是正确的,但是您的解决方案是错误的。Rails认为他需要显示动作,因为他正在执行GET请求。如果它是一个POST请求,一切都会很好。我尝试了你的解决方案,但我得到了新的错误,说没有路由匹配“/成员资格/req”。米沙,这是一个POST请求…当我做rake路由时,它显示req_成员资格POST/memberships/req(:format){:controller=>“memberships”,:action=>“req”}这意味着它是一个post请求。@NJF,正如我在上面试图解释的那样:它不是一个post请求,因为您不必使用必要的javascript来处理它。@NJF请在获得此错误时粘贴确切的日志消息。