2017-02-17 6 views
2

Railsを初めて使用しました。私は学生がログインし、試験にサインアップできるアプリを作ろうとしています。試験でRailsの他のモデルのデータでフォームに自動的に記入する方法

t.string "name" t.integer "ects" 
t.integer "year" t.integer "professor_id" 

その関係:教授とhas_one :exam の関係:belongs_to :professor

教授が持っている

件名には、次の列があります。私はそれに関連している次のモデルとコントローラを持っています次の列:

t.string "first_name" 
t.string "last_name" 
t.string "title" 

試験との関係:対象と

t.date "start_date" 
t.string "department" 
t.integer "professor_id" 
t.integer "subject_id" 

その関係:教授とbelongs_to :subject の関係:サインアップしてbelongs_to :professor の関係:

has_many :signups 
has_many :signupers, through: :signups, class_name: 'User' 
has_many :subjects

試験は、次の列があります。対象とhas_many :exams の関係

サインアップには次の列があります:

t.integer "exam_id" 
t.integer "user_id" 

試験との関係:ユーザーとbelongs_to :exam の関係:belongs_to :user

私はすでにすべてを接続し、new_signup_pathにリンクされている試験ショービューにサインアップ]ボタンを作ってきました。ユーザーがリダイレクトされたときにデータがフォームに表示されるようにしたい。科目名、教授名、開始日をフォームに表示したい。したがって、ユーザーは[送信]ボタンのみをクリックする必要があります。

私が働くこのフォームを、作ってきたが、それは空です:

<%= form_for @signup do |f| %> 
    <%= f.fields_for :exam do |e| %> 
     <%= e.label :start_date %> 
     <%= e.date_field :start_date %> 
    <% end %> 
    <%= f.submit "Submit", class: "btn btn-large btn-primary" %> 
<% end %> 

私も教授の名前(教授モデル)とサブジェクト名(件名モデル)を持っていると思います。

これは私のサインアップコントローラです:

before_action :signed_in_user, only: [:index, :new, :create] 

def index 
    if current_user.role == 1 
     @signups = Signup.all 
    else 
     @signups = Signup.where(user_id:current_user.id) 
    end 
end 

def new 
    @signup = Signup.new 
end 

def create 
    @signup = Signup.new(signup_paramas) 
    @signup.user_id = current_user.id 
    if @signup.save 
     flash[:success] = "You signed up for the exam." 
     redirect_to @signups 
    else 
     render :new 
    end 
end 
private 
def signup_paramas 
    params.require(:signup).permit(:user_id).merge(exam_id: @exam.id) 
end 

私は2週間のために、この問題をグーグルでてきたが、私は解決策を見つけることができませんでした。 何か助けていただければ幸いです。URLパラメータリダイレクトするようにexam_idを追加し、サインアップボタンを

+2

http://apidock.com/rails/FormHelper/text_field最初のコメントを参照 – Fallenhero

答えて

2

:)事前に感謝します。この後

def new 
    @signup = Signup.new 
    @exam = Exam.find(params[:exam_id]) 
end 

new_signup_path(exam_id: @exam.id)

はその後サインアップコントローラの新しいアクションで、あなたは試験にアクセスできるようになりますあなたは、フォームフィールドを移入するためにビューで@examを使用することができます:

<%= form_for @signup do |f| %> 
    <%= f.fields_for :exam do |e| %> 
    <%= e.label :start_date %> 
    <%= e.date_field :start_date, value: @exam.start_date %> 
    <% end %> 
    <%= f.submit "Submit", class: "btn btn-large btn-primary" %> 
<% end %> 

あなたはまた、教授や件名にアクセスできるようになります@examまでこれはどこから始めるべきかをあなたに知らせるものです。

+0

私はこのコード行で試していました:@exam = Exam.find(params [:exam_id])前に、 「IDで試験を見つけることができませんでした。なぜなら、私はURLパラメータをリダイレクトするべきかどうか分からなかったからです。それは意味がありました。私は何の価値もないので、date_fieldは空でした。 lot。 – Aida

+0

私は必要なすべてのデータを表示するフォームを作っています。http://prntscr.com/eaqwk9しかし、私がそれを提出すると、C:/ruby/rails_project/app/views/signups/new.htmlを表示します。私はこのようなものを置こうとしました:params.permit(:exam_id、:user_id).merge()は、 subject_id:@ examject.id、professor_id:@ exam.pr私はsubjectとprofessorの定義を新しいアクションに入れましたが、subjectやprofessor i signup_paramsは認識しません。 – Aida

関連する問題