Link_to Routing Issue With Nested Resources

2019-07-02 01:45发布

问题:

I have two models Jobs and Questions. A job has many questions and questions belong to a job. I've set up the resources in the model, as well as the routes. I am having an issue trying to link_to the Show method of the questions controller on the questions#index page. My rake routes say that the path should be job_question_path with the two necessary :id's being :job_id and :id , so I tried:

<td><%= link_to 'Show', job_question_path(@job, question) %></td>

and got the error:

No route matches {:action=>"show", :controller=>"questions", :job_id=>nil, :id=>#<Question id: 1, job_id: 1, question1: "sfsdfssfs", question2: "sfsdfs", question3: "sfsdf", question4: "sfsdfsf", question5: "sfsfsfs", created_at: "2011-06-21 03:25:12", updated_at: "2011-06-21 03:25:12">}

I've tried multiple other combos and nothing is seeming to work, I keep getting:

No route matches {:action=>"show", :controller=>"questions", :job_id=>nil } 

or some combination of that.

The part I don't get is that I can put in the url /jobs/1/questions/1 and it takes me to the show page, so I am assuming that my questions#show methods are ok. See below for the rest of my code.

Questions#index view

<% @questions.each do |question| %>
 <tr>
  <td><%= question.question1 %></td>
  <td><%= question.question2 %></td>
  <td><%= question.question3 %></td>
  <td><%= question.question4 %></td>
  <td><%= question.question5 %></td>
  <td><%= link_to 'Show', job_question_path(@job, question) %></td>
</tr>

<% end %>

Questions Controller

def index
 @questions = Question.all

 respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @questions }
 end
end

def show
  @job = Job.find(params[:job_id])
  @question = @job.questions.find(params[:id])

 respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @question }
 end
end

Models

class Job < ActiveRecord::Base
 has_many :questions

class Question < ActiveRecord::Base
  belongs_to :job

Routes.rb

 root :to => "pages#home"

 resources :jobs do
  resources :questions
 end

 get "pages/home"
 get "pages/about"
 get "pages/contact"

See this https://gist.github.com/1032734 for my rake routes.

Thanks for any help in advance, i've been at this for a while now and just can't figure out the solution. Please let me know if you need any more info.

回答1:

may be so?

Questions#index view

<% @questions.each do |question| %>
 <tr>
  <td><%= question.question1 %></td>
  <td><%= question.question2 %></td>
  <td><%= question.question3 %></td>
  <td><%= question.question4 %></td>
  <td><%= question.question5 %></td>
  <%= link_to 'Show', job_question_path(question.job_id, question.id) %>
</tr>

It have to work. Or haven't you 'job_id' field in Questions table ?