第二个控制器中的Ruby link_to错误-没有路由匹配

时间:2019-08-29 12:49:30

标签: ruby-on-rails ruby

在寻求帮助时,我认为我在做一些愚蠢的事情,但我无法解决。我创建了一个link_to来远程击中ruby中的控制器动作,以便可以将一个问题标记为“已解决”(发送问题idpatient_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

2 个答案:

答案 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 %>