Rails:2单击一个提交按钮在两个数据库中插入记录(将一个控制器的记录保存在另一个控制器中)
Posted
技术标签:
【中文标题】Rails:2单击一个提交按钮在两个数据库中插入记录(将一个控制器的记录保存在另一个控制器中)【英文标题】:Rails:2 insert record in two db on clicking one submit button (save record of one controller in other controller ) 【发布时间】:2012-10-02 06:21:36 【问题描述】:我有 2 个模型对应于 2 个单独的数据库表。
一个是task
,另一个是bookedhour
关系就像
Task: has_many booked_hours
BookedHour: belongs_to Task
要创建一个任务,它需要来自模型BookedHour
的预定小时数。它是新任务的形式,为此attr_accessor
在任务模型中声明。
现在我想在保存任务时存储那个task和booked hours。(基本上我想通过单击保存新的task
和bookedHours
)
我在任务的创建方法中使用了以下代码,但它不起作用。
我在保存task(@task.save)
后写了这一行
BookedHour.create(:user_id => @user_id, :project_id => session[:actual_project].id, :hours_booked => params[:task][:spend_today])
我在控制台中得到了关注,但没有保存 bookedhours
的记录,但它成功保存了新任务。
BookedHour Columns (0.7ms) SHOW FIELDS FROM `booked_hours`
SQL (0.1ms) BEGIN
SQL (0.0ms) ROLLBACK
【问题讨论】:
不使用 BookedHour.create,@task.booked_hours.build 有帮助吗? 在预定时间没有工作记录 【参考方案1】:创建实际上不会将记录保存到数据库中,您需要创建!创建和保存。
BookedHour.create 中也没有任何地方可以将任务记录与预定小时记录相关联。
尝试以下方法:
BookedHour.create!(
:task_id => @task.id,
:user_id => @user_id,
:project_id => session[:actual_project].id,
:hours_booked => params[:task][:spend_today]
)
【讨论】:
create
实际上与create!
完全相同,唯一的区别是返回false
而不是在失败时引发异常。
得到错误 ActiveRecord::RecordInvalid(翻译缺失:nl.activerecord.errors.messages.record_invalid):
这是因为记录无效。将 default_locale 设置为英语以避免翻译问题并重新运行。【参考方案2】:
试试
@task.booked_hours.create!(:user_id => @user_id,
:project_id => session[:actual_project].id,
:hours_booked => params[:task][:spend_today])
如果出现问题(如果事务回滚,则会出现问题),您将看到异常,并且您将能够解决它。
您能否发布 BookedHour 课程的验证部分? (类定义中所有以“belongs_to”、“validate_...”和“validates”开头的行)
【讨论】:
得到同样的错误 ActiveRecord::RecordInvalid(翻译缺失:nl.activerecord.errors.messages.record_invalid): 将语言环境设置为英语或加载荷兰语 I18n 文件。 当然可以,但是错误应该显示记录无效的原因。以上是关于Rails:2单击一个提交按钮在两个数据库中插入记录(将一个控制器的记录保存在另一个控制器中)的主要内容,如果未能解决你的问题,请参考以下文章
Rails 5 ajax 表单:单击 Ajax 中的 2 个单选按钮之一提交表单