2

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

以下是我在成员控制器中的自定义操作

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"

当我单击加入请求时,我收到显示操作的未知操作错误。我在这里做错了什么?

4

3 回答 3

2

要使链接执行 POST 请求,您需要 javascript。Rails 会为您处理这些,但您必须包含必要的文件。添加<%= javascript_include_tag :defaults %>到您的布局文件将解决您的问题。如果您不这样做,将执行 GET 请求而不是 POST 请求。

于 2012-04-24T08:09:59.103 回答
1

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

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

请参阅http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

:on => :collection创建一个类似memberships/reqwhere
:on => :member的路线为您提供一个类似memberships/:id/req.

于 2012-04-24T06:48:28.447 回答
0

默认情况下,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
于 2012-04-24T07:37:49.707 回答