如何使用 Rails 中其他模型的数据自动填写表格
How to automatically fill in the form with data from other models in 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
它与注册的关系:
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 %>
我还想要教授的名字(Professor 模型)和学科名称(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 周了,但一直没能找到解决方案。
我感谢任何形式的帮助。提前致谢:)
在注册按钮上添加 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
访问教授和学科。这可以让您了解从哪里开始。
我是 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
它与注册的关系:
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 %>
我还想要教授的名字(Professor 模型)和学科名称(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 周了,但一直没能找到解决方案。 我感谢任何形式的帮助。提前致谢:)
在注册按钮上添加 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
访问教授和学科。这可以让您了解从哪里开始。