如何使用输入日期创建记录并使用 ROR 保存参数?
How can create records using input date and save the param using ROR?
我正在尝试根据某人选择日期生成记录,它将根据输入值保存更多记录。
控制器
##./app/controller/user_job_controller.rb
def new
@user_job = UserJob.new
end
def user_job_params
params.require(:user_job).permit!
end
型号
#user_job.rb
after_save :save_default_values, :if => :new_record?
private
def save_default_values
if params[:dateadd].to_i > 0
params[:dateadd].to_i.times do |i|
self.name = params[:name]
self.dateuser = params[:dateuser] + i+ 1.day
end
else
self.name = params[:name]
self.dateuser = params[:dateuser]
end
end
查看
<%= form_with(model: user_job) do |form| %>
Name:<%= form.text_field :name %>
Date: <%= text_field_tag "dateuser", params[:dateuser].to_i %>
Date added: <%= text_field_tag "dateadd", params[:dateadd].to_i %>
<%= form.submit %>
<% end %>
数据示例:
#form values
Name: test
Date: 23-09-2021
days added: 2
想要的结果:
#it will do on console or ruby on rails logs
insert into user_jobs (id:1, name:test, dateuser: 23-09-2021),
insert into user_jobs (id:2, name:test, dateuser: 24-09-2021),
insert into user_jobs (id:3, name:test, dateuser: 25-09-2021),
日志显示不是
Processing by UserJobsController#create as HTML
Parameters: {"authenticity_token"=>"[FILTERED]", "user_job"=>{"name"=>"test"}, "dateuser"=>"2021-09-24", "dateadd"=>"2", "commit"=>"Create User job"}
Unpermitted parameter: :name
结果日志:
insert into user_jobs(created_at: 23-09-2021)
你能帮我正确保存数据吗?
代码中存在一些问题。
1。参数只能在控制器中访问,您想在模型中读取它
有多种方法可以将params值传递给模型,例如,您可以在模型中添加attr_accessor :dateadd
。
但我认为更清晰的方法是将 :save_default_values 中的行为提取到 new public 方法中 并在控制器中调用它。
2。 params[:name] 是模型中的一个属性,你应该使用强参数来分配属性
3。显然 dateuser 是 user_jobs 的一列,不是吗?
我们可以使用date_field
来选择日期,并将此字段添加到强参数中。
4。记录保存后,该记录不再是新记录,因为它有 id 值。
尝试使用after_create
或after_save on: :create
。然而,我并没有在下面的代码中使用这个回调,但这只是个人选择:)
# user_job.rb
class UserJob < ApplicationModel
# add new public method
def add_additional_jobs!(days)
(1..days).each do |n|
UserJob.create!(name: name, dateuser: dateuser + n.days)
end
end
end
# user_jobs_controller.rb
class UserJobsController < ApplicationController
def new
@user_job = UserJob.new
end
def create
UserJob.transaction do
@user_job = UserJob.create!(user_job_params)
if params[:dateadd].to_i > 0
@user_job.add_additional_jobs!(params[:dateadd].to_i)
end
end
end
private
def user_job_params
params.require(:user_job).permit(:name, :dateuser)
end
end
然后在视图中
<%= form_with(model: user_job) do |form| %>
Name:<%= form.text_field :name %>
Date: <%= form.date_field :dateuser %>
Date added: <%= text_field_tag "dateadd", params[:dateadd].to_i %>
<%= form.submit %>
<% end %>
我正在尝试根据某人选择日期生成记录,它将根据输入值保存更多记录。
控制器
##./app/controller/user_job_controller.rb
def new
@user_job = UserJob.new
end
def user_job_params
params.require(:user_job).permit!
end
型号
#user_job.rb
after_save :save_default_values, :if => :new_record?
private
def save_default_values
if params[:dateadd].to_i > 0
params[:dateadd].to_i.times do |i|
self.name = params[:name]
self.dateuser = params[:dateuser] + i+ 1.day
end
else
self.name = params[:name]
self.dateuser = params[:dateuser]
end
end
查看
<%= form_with(model: user_job) do |form| %>
Name:<%= form.text_field :name %>
Date: <%= text_field_tag "dateuser", params[:dateuser].to_i %>
Date added: <%= text_field_tag "dateadd", params[:dateadd].to_i %>
<%= form.submit %>
<% end %>
数据示例:
#form values
Name: test
Date: 23-09-2021
days added: 2
想要的结果:
#it will do on console or ruby on rails logs
insert into user_jobs (id:1, name:test, dateuser: 23-09-2021),
insert into user_jobs (id:2, name:test, dateuser: 24-09-2021),
insert into user_jobs (id:3, name:test, dateuser: 25-09-2021),
日志显示不是
Processing by UserJobsController#create as HTML
Parameters: {"authenticity_token"=>"[FILTERED]", "user_job"=>{"name"=>"test"}, "dateuser"=>"2021-09-24", "dateadd"=>"2", "commit"=>"Create User job"}
Unpermitted parameter: :name
结果日志:
insert into user_jobs(created_at: 23-09-2021)
你能帮我正确保存数据吗?
代码中存在一些问题。
1。参数只能在控制器中访问,您想在模型中读取它
有多种方法可以将params值传递给模型,例如,您可以在模型中添加attr_accessor :dateadd
。
但我认为更清晰的方法是将 :save_default_values 中的行为提取到 new public 方法中 并在控制器中调用它。
2。 params[:name] 是模型中的一个属性,你应该使用强参数来分配属性
3。显然 dateuser 是 user_jobs 的一列,不是吗?
我们可以使用date_field
来选择日期,并将此字段添加到强参数中。
4。记录保存后,该记录不再是新记录,因为它有 id 值。
尝试使用after_create
或after_save on: :create
。然而,我并没有在下面的代码中使用这个回调,但这只是个人选择:)
# user_job.rb
class UserJob < ApplicationModel
# add new public method
def add_additional_jobs!(days)
(1..days).each do |n|
UserJob.create!(name: name, dateuser: dateuser + n.days)
end
end
end
# user_jobs_controller.rb
class UserJobsController < ApplicationController
def new
@user_job = UserJob.new
end
def create
UserJob.transaction do
@user_job = UserJob.create!(user_job_params)
if params[:dateadd].to_i > 0
@user_job.add_additional_jobs!(params[:dateadd].to_i)
end
end
end
private
def user_job_params
params.require(:user_job).permit(:name, :dateuser)
end
end
然后在视图中
<%= form_with(model: user_job) do |form| %>
Name:<%= form.text_field :name %>
Date: <%= form.date_field :dateuser %>
Date added: <%= text_field_tag "dateadd", params[:dateadd].to_i %>
<%= form.submit %>
<% end %>