【问题标题】:Tying rails account to scaffold将导轨帐户绑定到脚手架
【发布时间】:2013-06-08 17:14:22
【问题描述】:

我有一个基于 Devise cancan bootstrap 存储库的 Rails 应用程序。

我正在尝试为员工创建一个页面来记录小时数。我设置了一个脚手架,它会在该脚手架上生成一个带有表单的视图,但我的问题是如何从菜单链接到该页面,以及如何使这些记录时间与记录的任何员工相关联在。

我的脚手架是

rails g scaffold hours email:string day:date hours:integer

【问题讨论】:

  • 它是否应该像一个“轮班”功能,员工说“我开始工作”,在一天结束时他们说“我现在停止工作”并计算时间,为每个员工,最终每天?
  • 不,只是我可以登录,选择我提交时间的哪一天,并说出我工作了多少小时。

标签: ruby-on-rails ruby devise cancan


【解决方案1】:

所以除了用户创建和身份验证之外,Devise 还添加了以下内容

  • 用户模型(由数据库中的用户表支持)
  • 您的控制器代码和视图中可用的 current_user 方法

你想在所有相关模型中使用foreign_key user_id而不是电子邮件,你的脚手架生成将是这样的(我稍微改变了你的命名,但你明白了)

rails g scaffold TimeSheet user_id:integer day:date hours_worked:integer minutes_worked:integer

然后您需要更新您的User 模型和新创建的TimeSheet 模型以创建两个模型之间的关联

有关详细信息,请参阅 rails 指南:http://guides.rubyonrails.org/association_basics.html

class User
  # ... 
  has_many :time_sheets
end

class TimeSheet
  belongs_to :user
end

您需要从脚手架生成的视图中删除 user_id,并在 createupdate 操作期间将其设置在控制器中

def create
  @time_sheet = TimeSheet.new(params[:time_sheet])
  @time_sheet.user = current_user

  # ....

【讨论】:

  • 我能够让它工作,那么现在我如何只显示该用户的工作时间日志?当我登录另一个帐户时,它仍然显示完整列表
  • 范围返回的列表 - current_user.time_sheets - 我强烈建议阅读 rails guides guides.rubyonrails.org - 那里有很多很好的信息
猜你喜欢
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2021-05-02
相关资源
最近更新 更多