在寻求帮助时,我认为我在做一些愚蠢的事情,但我无法解决。我创建了一个link_to
来远程击中ruby中的控制器动作,以便可以将一个问题标记为“已解决”(发送问题id
和patient_id
)。
当我处于show
的{{1}}视图中而不是PatientsController
的{{1}}视图中时,此方法有效。我正在为人道主义部门设计精简的病人记录系统。
我不明白为什么它只能在一种视图中起作用,而不能在另一种视图中起作用!!
如果这不是执行此操作的适当方法,则乐于以其他方式执行此操作。让我知道是否有人需要更多信息。
预先感谢
Ollie
错误
Notes#new中的ActionController :: UrlGenerationError
没有路由匹配{:action =>“ resolve”,:controller =>“ issues”, :issue_id =>“ 1”,:Patient_id => 2}
resolve_issue GET /问题/:id/resolve(.:format)
问题#resolve
部分查看代码
这是在某些视图上引发错误的代码。
它嵌入在new
循环中,我知道它在某些视图上输出时会起作用,如果我删除以下行,则它将在所有视图上输出。
NotesController
患者控制器代码-工作
.each
提示控制器代码-错误
<%= link_to "<span class='caption'>Resolve</span><i class='material-icons left'>check</i>".html_safe,
{ :controller => "issues", :action => "resolve", :remote => true, :patient_id => issue.patient.id, :issue_id => issue.id, :message => "URL passed message" },
:class => "btn waves-effect waves-light icon-to-text-btn red" %>
问题控制器代码
这按预期工作。
def show
session[:return_to] ||= request.referer
@patient = Patient.find(params[:id])
session[:patient_id] = params[:id]
@obs = @patient.observations.last
@pagy, @notes = pagy( Note.where(:patient_id => @patient.id).reverse_order, items: 10 )
render layout: "no-card"
end
路线文件
def new
@note = Note.new
@note.patient_id = params[:patient_id]
@note.user_id = params[current_user.id]
@note.note_time = Time.now
@patient = Patient.find(params[:patient_id])
session[:patient_id] = params[:patient_id]
end
答案 0 :(得分:1)
所以基本上issueController
中您需要什么:
class IssueController < ApplicationController
def resolve
# do some staf here
end
end
,在routes.rb
中,您应该输入
get 'issues/:id/resolve', to: "issue#resolved", as: :resolve
然后您可以创建链接,如下所示:
link_to "Check", resolve_path
答案 1 :(得分:0)
请注意此路线:
get 'issues/:id/resolve' => 'issues#resolve', as: :resolve_issue
这里有:id参数,但是在link_to
帮助器中有:issue_id => issue.id
所以您应该像这样将路线更改为:
get '/issues/:issue_id/resolve/:patient_id => "issues#resolve", as: :resolve_issue
再次,将您的link_to
更改为此:
<%= link_to resolve_issue_path(issue, issue.patient, message: "URL passed message"), remote: true, class: "btn waves-effect waves-light icon-to-text-btn red" do %>
<span class='caption'>Resolve</span><i class='material-icons left'>check</i>
<% end %>