2017-02-17 22 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 :exams Его отношения с темой: has_many :subjects

экзамен имеет следующие столбцы:

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

Его отношения с темой: belongs_to :subject Его отношения с профессором: belongs_to :professor Его отношения с Signup:

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

Регистрация содержит следующие столбцы:

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 %> 

Я также хочу иметь имя профессора (профессор модели) и имя субъекта (Subject модель).

это мои регистрации контроллер:

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

На кнопке SIGNUP добавить exam_id перенаправлять параметры URL: new_signup_path(exam_id: @exam.id)

Тогда в новом действии контроллера Signups вы будете иметь возможность получить доступ к экзамену:

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]) раньше, но это сказал: «Не удалось найти экзамен с« id », потому что я не знал, что мне нужно перенаправить параметры url. Было ясно, что дата_поле было пустым, так как я не придавал значения. Я очень ценю ваш ответ. много. – Aida

+0

Я сделал форму, которая показывает все необходимые данные. http://prntscr.com/eaqwk9 Но когда я отправляю это, я получаю: Отображение C: /ruby/rails_project/app/views/signups/new.html. erb, где строка # 8 поднята: неопределенный метод 'subject 'для nil: NilClass. Вероятно, потому, что я не допускал этого в signup_params. Я попытался сделать что-то вроде этого: params.permit (: exam_id,: user_id) .merge (subject_id: @ exam.subject.id, Professor_id: @ exam.pr ofessor.id), и я также поставил определение предмета и профессора в новых действиях, но он не признает предмет или профессор i signup_params. – Aida