Rails 4 - 路线和路径
问题描述:
我想学习如何在Rails 4中使用路线和路径。Rails 4 - 路线和路径
我有一个叫做组织请求的模型。
我有routes.rb中的路线如下:
resources :organisation_requests do #, only: [ :index, :new, :create ]
member do
put "requested" => "organisation_requests#requested", as: :request_approval #what does this mean?
put "approved" => "organisation_requests#requested", as: :approved #what does this mean?
put "rejected" => "organisation_requests#rejected", as: :not_approved #what does this mean?
put "removed" => "organisation_requests#removed", as: :removed #what does this mean?
end
end
在我的组织要求控制器,我有:
def approved
organisation_request = OrganisationRequest.find(params[:id])
authorize @organisation_request
if organisation_request.state_machine.transition_to!(:approved)
flash[:notice] = "You've been added as a member. Welcome aboard."
format.html { redirect_to :index }
# format.json { render :show, status: :ok, location: @project }
# redirect_to action: :show, id: project_id
# add mailer to send message to owner that article has been approved
else
flash[:error] = "You're not able to manage this organisation's members"
redirect_to(profile_path(current_user.profile))
# redirect_to action: :show, id: project_id
end
end
在我的组织要求指标,我试图让允许用户批准请求的路径:
<% @organisation_requests.each do |orgReq| %>
<tr>
<td>
<%#= link_to orgReq.profile.user.full_name, organisation_request.profile_path(organisation_request.profile.id) %>
</td>
<td>
<%= orgReq.created_at.try(:strftime, '%e %B %Y') %>
</td>
<td>
<%= orgReq.current_state %>
</td>
<td>
<% if policy(orgReq).approved? %>
<%= link_to "APPROVE", request_approval_path(@organisation_request), :class=>'btn btn-info', method: :put %>
<% end %>
</td>
</tr>
<% end %>
当我保存所有这些并尝试它时,我预计批准按钮才能工作。相反,我得到一个错误,说:
undefined method `request_approval_path' for #<#<Class:0x007fa470f72968>:0x007fa474d17a98>
我不知道我要去哪里错了?
答
这是因为方法名称是“request_approval_organisation_request”。你正在调用这条路线来控制一个控制器。如果添加
get 'exit', to: 'sessions#destroy', as: :logout
内,您的资源:organisation_requests你会得到
logout_organisation_request_path
等
答
rake
在Rails 4中有一个routes
命令,它可以让你看到你的URL路径助手都是由你的routes.rb
文件的内容命名的。
从您的项目根目录,rake routes | grep request_approval
会产生什么?