2016-04-01 13 views
0

の生徒を見つけることができませんでした。「学生」の「マーク」を作成しようとすると、上記のエラーが発生します。私は新しいマークを作成するときに:student_idを渡す方法を理解できません。Rails - 'id' =

ルート

Rails.application.routes.draw do 


resources :students do 
resources :marks 
end 

resources :marks 

root 'students#index' 

マークスコントローラ

class MarksController < ApplicationController 
def create 
    @student = Student.find(params[:student_id]) 
    @mark = @student.marks.create(params[:input1, :input2, :input3, :weight1, :weight2, :weight3, :mark1, :mark2, :mark3, :final_mark].permit(:input1, :input2, :input3, :weight1, :weight2, :weight3, :mark1, :mark2, :mark3, :final_mark)) 
    @mark.save 

    if @mark.save 
     redirect_to student_path(@student) 
    else 
     render 'new' 
    end 
end 

def new 
    @mark = Mark.new 
end 

private 
    def set_mark 
    @mark = Mark.find(params[:id]) 
    end 

end 

学生ビューの表示

<p id="notice"><%= notice %></p> 

    <p> 
    <strong>Student Number</strong> 
    <%= @student.StudentNumber %> 
</p> 

<p> 
    <strong>Project Title</strong> 
    <%= @student.ProjectTitle %> 
</p> 

<p> 
    <strong>Project PDF</strong> 
    <%= @student.ProjectTitle %> 
</p> 

<p> 
    <strong>Reader 1</strong> 
    <%= @student.Reader1 %> 
</p> 

<p> 
    <strong>Reader 2</strong> 
    <%= @student.Reader2 %> 
</p> 

<h3> <%= link_to 'Add Mark', new_student_mark_path(@student), class:"btn btn-warning"%> </h3> 

<p> 
    <strong>Reader 3</strong> 
    <%= @student.Reader3 %> 
</p> 

<%= link_to 'Edit', edit_student_path(@student) %> | 
<%= link_to 'Back', students_path %> 

マークスフォーム

<%= form_for @mark, html: {multipart: true} do |f| %> 
    <% if @mark.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@mark.errors.count, "error") %> prohibited this grading from being saved:</h2> 

     <ul> 
     <% @mark.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label 'Introduction' %><br> 
    <%= f.text_area :input1 %> 
    <%= f.number_field :weight1 %> 
    <%= f.number_field :mark1 %> 
    </div> 
    <div class="field"> 
    <%= f.label 'Main' %><br> 
    <%= f.text_area :input2 %> 
    <%= f.number_field :weight2 %> 
    <%= f.number_field :mark2 %> 
    </div> 
    <div class="field"> 
    <%= f.label 'Conclusion' %><br> 
    <%= f.text_area :input3 %> 
    <%= f.number_field :weight3 %> 
    <%= f.number_field :mark3 %> 
    </div> 
    <div class="actions"> 
    <%= f.submit class:"btn-xs btn-success"%> 
    </div> 

<% end %> 

マークモデル

class Mark < ActiveRecord::Base 
    belongs_to :student 
end 

学生モデル

class Student < ActiveRecord::Base 

has_many :marks 

has_attached_file :document 
validates_attachment :document, :content_type => { :content_type => %w(application/pdf) } 
end 

これはおそらく、本当に愚かなものだが、誰もが問題を説明することができれば、私は本当に感謝されると思います。

おかげ

+0

がどのようにアクションを作成ヒットしている:は、あなたが新しいアクションであなたのテンプレートに学生のインスタンスを渡す必要があり、この作業をするためにすることを言及するのを忘れましたか? – Pavan

+0

<%= link_to 'Add Mark'、new_student_mark_path(@student)%> – emmet

+0

このコードはどのビューページにありますか?そのビューコードを投稿してください。 – Pavan

答えて

1

私は、この目的のために隠されたフィールドを使用して、あなたを示唆していません。 あなたはマークをform_forヘルパーに一緒に渡す必要があり、レールはあなたのための適切なURLを生成します:/ students /:student_id/marks この場合、あなたの行動のparamsからstudent_idを後で取り出すことができます。ネストされたリソースに関する

form_for [@student, @mark], html: {multipart: true} do |f|

詳細情報:

http://guides.rubyonrails.org/routing.html#nested-resources

http://www.informit.com/articles/article.aspx?p=1671632&seqNum=7

https://gist.github.com/jhjguxin/3074080

UPDATE:

def new 
    @student = Student.find(params[:student_id]) 
    @mark = @student.marks.build 
end 
+0

ありがとう、彼らは多くを助けた。ほんとうにありがとう。今すぐ次の問題に:) – emmet

+1

素晴らしい!どういたしまして。あなたが最終的に問題を管理したことを聞いてうれしいです。 – SunnyMagadan

関連する問題