我是 Rails 的新手。我正在尝试制作一个应用程序,学生可以在其中登录并注册考试。我有以下与此相关的模型和 Controller :

该主题具有以下列:

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它与注册的关系:
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 的考试展示 View 上制作了一个注册按钮。我希望数据在用户重定向到表单时出现在表单中。我希望在表格中显示学科名称、教授姓名和开始日期。因此,用户只需单击提交按钮。

我制作了这个表格,它有效,但它是空的:
<%= 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 %>

我也想要教授的名字(Professor model)和学科名称(Subject model)。

这是我的注册 Controller :
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 周,但我一直无法找到解决方案。
我感谢任何形式的帮助。提前致谢 :)

最佳答案

在注册按钮上添加exam_id来重定向url参数:new_signup_path(exam_id: @exam.id)
然后在注册 Controller 的新操作中,您将能够访问考试:

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

在此之后,您将能够在 View 中使用 @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 访问教授和学科。这是让你知道从哪里开始的东西。

关于ruby-on-rails - 如何使用 Rails 中其他模型的数据自动填写表单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42297093/

10-12 06:55