Rails link_to路径

我想在Rails 4中创建一个应用程序。

我有3个模型:Project,Project_Question,Project_Answer

协会是:

项目:

has_many :project_questions 

并接受项目问题的嵌套属性。

项目问题:

 belongs_to :project has_one :project_answer 

并接受Project Answers的嵌套属性。

我的路线嵌套如下:

 resources :projects do resources :project_questions do resources :project_answers end end 

在我的项目问题部分,我想要一个链接来回答问题。 我试过了:

   project_question.id) %> 

我的路由文件中有一个具有该名称的路由,但是我收到此错误消息:

 undefined local variable or method `project_question' for #<#:0x0000010f810b68> 

括号内应该怎么做?

视图:

 
project_question.id) %>

项目问题控制器:

  class ProjectQuestionsController < ApplicationController before_action :set_project_question, only: [:show, :edit, :update, :destroy] # GET /project_questions # GET /project_questions.json def index @project_questions = ProjectQuestion.all end # GET /project_questions/1 # GET /project_questions/1.json def show end # GET /project_questions/new def new @project_question = ProjectQuestion.new @project = Project.find(params[:project_id]) # @project_id = params[:project_id] @project_question.project_answers[0] = ProjectAnswer.new end # GET /project_questions/1/edit def edit end # POST /project_questions # POST /project_questions.json def create @project_question = ProjectQuestion.new(project_question_params) @project_question.project_id = project_question_params[:project_id] respond_to do |format| if @project_question.save format.html { redirect_to project_url(Project.find(project_question_params[:project_id])), notice: 'Project question was successfully created.' } format.json { render action: 'show', status: :created, location: @project_question } else format.html { render action: 'new' } format.json { render json: @project_question.errors, status: :unprocessable_entity } end end end # PATCH/PUT /project_questions/1 # PATCH/PUT /project_questions/1.json def update respond_to do |format| if @project_question.update(project_question_params) format.html { redirect_to @project_question, notice: 'Project question was successfully updated.' } format.json { head :no_content } else format.html { render action: 'edit' } format.json { render json: @project_question.errors, status: :unprocessable_entity } end end end # DELETE /project_questions/1 # DELETE /project_questions/1.json def destroy @project_question.destroy respond_to do |format| format.html { redirect_to project_questions_url } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_project_question @project_question = ProjectQuestion.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def project_question_params params[:project_question].permit(:id, :title, :content, :project_id, :user_id, project_answer_atttibutes: [:id, :answer, :project_question_id, :user_id] ) end end 

当你运行rake routes ,你会发现这个

 new_project_project_question_project_answer GET /projects/:project_id/project_questions/:project_question_id/project_answers/new(.:format) project_answers#new 

这意味着它需要:project_id:project_question_id作为键。

这应该工作

 <%= link_to 'Answer this question', new_project_project_question_project_answer_path(:project_id => @project.id, :project_question_id => singleQuestion.id) %> 

请注意new_project_project_question_project_answer_path而不是new_project_project_questions_project_answer_path

你的link_to应该是以下内容

  <%= link_to 'Answer this question', new_project_project_questions_project_answer_path(:project_id => @project.id, :project_question_id => singleQuestion.id) %> 

视图将如下所示

  
<% @project.project_questions.each do |singleQuestion| %>
<%= singleQuestion.title %>
<%= singleQuestion.try(:content) %>
<% if current_user.id == @project.creator_id %> <%= link_to 'Answer this question', new_project_project_questions_project_answer_path(:project_question_id => singleQuestion.id) %> <% end %> <% end %>

检查那个参数

  def project_question_params params[:project_question].permit(:id, :title, :content, :project_id, :user_id, project_answer_atttibutes: [:id, :answer, :project_question_id, :user_id] ) end 

project_id

并且你没有在link_to传递它所以它发现新的错误missing required keys: [:project_id]