我已在我的会员控制器中创建了一个自定义操作req
,并为其定义了路径。但是当我在link_to上给出该自定义操作的路径时,它给出了错误说明未知操作,操作'show'找不到MembershipsController。我知道为什么当我给自定义操作提供路径时它会找到show动作。
以下是我在会员控制器中的自定义操作
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"
当我点击请求加入时,我收到了显示操作的未知操作错误。我在这做错了什么?
答案 0 :(得分:2)
要使链接执行POST请求,您需要javascript。 Rails会为您解决此问题,但您必须包含必要的文件。将<%= javascript_include_tag :defaults %>
添加到布局文件将解决您的问题。如果不这样做,将执行GET请求而不是POST请求。
答案 1 :(得分:1)
您可能希望将您的操作分配给集合或成员。
resources :memberships do
post 'req', :on => :collection # or :member
end
请参阅http://guides.rubyonrails.org/routing.html#adding-more-restful-actions。
:on => :collection
创建一个类似memberships/req
的路线
:on => :member
为您提供了memberships/:id/req
等对象的路径。
答案 2 :(得分:0)
默认情况下,rails会提供CRUD操作。
new,create,edit,update,delete
代码
collection do
post 'req'
end
将创建如下路线。
/memberships/req
因此,铁路误解了您的请求/会员资格/:id 并尝试匹配show action.as没有show动作它会引发未知动作。
因此解决方案是您需要告知您没有使用CRUD操作
可以按照以下方式完成
resources :memberships, :only => [] do
collection do
post 'req'
end
end