2017-02-17 89 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" 

它與考試的關係: has_many :subjects

考試有以下欄目:

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 :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周,但我一直沒能找到解決的辦法。 我欣賞任何形式的幫助。感謝提前:)

+2

http://apidock.com/rails/ActionView/Helpers/FormHelper/text_field看到第一評論 – Fallenhero

回答

2

在註冊按鈕添加exam_id重定向URL參數:new_signup_path(exam_id: @exam.id)

然後在註冊等控制器的新動作,你將能夠訪問考試:

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

在此之後你將能夠使用@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])之前,但它說「無法找到‘身份證’的考試,因爲我不知道我應該重定向URL參數,這是有道理的DATE_FIELD是空的,因爲我沒有把任何價值。我真的很感謝你的答案。這對我的幫助。很多 – Aida

+0

我做這顯示了所有必要的數據形式http://prntscr.com/eaqwk9但是,當我提交我得到:顯示C:/ruby/rails_project/app/views/signups/new.html。 ERB其中線#8提出:對無 未定義的方法'主題」:。NilClass這可能是因爲我沒有讓這個在signup_params我試圖把這樣的事情:params.permit(:exam_id,:USER_ID).merge( subject_id:@ exam.subject.id,professor_id:@ exam.pr ofessor.id),我也把主題和新的行動教授的定義,但它不承認主題或教授我signup_params。 – Aida