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]