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 在任务模型中声明。 现在我想在保存任务时存储那个taskbooked hours。(基本上我想通过单击保存新的taskbookedHours

我在任务的创建方法中使用了以下代码,但它不起作用。 我在保存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 个单选按钮之一提交表单

Rails:一个表单中的多个提交按钮

如何在提交按钮上多次单击时仅在数据库中插入一条记录

使用 js/jquery 在 ruby​​ on rails 中隐藏 form_tag 上的提交按钮

通过单击 Ruby on Rails 中的按钮生成表单

带有Rails的DataTable无法提交多个页面项目