如何在数据库中存储Rails表单中复选框、FK和日期时间的属性?
如何在数据库中存储Rails表单中复选框、FK和日期时间的属性?
(rails 2.2.2)
我有两个模型,用户和订阅。每个用户都可以拥有一个或多个订阅(=高级服务)。以下是属性:
- 用户:id,用户名,...
- 订阅:id,user_id(FK),类型,开始时间,结束时间
这些是类:
class User < ActiveRecord::Base .. has_many :subscriptions, :dependent => :destroy .. end class Subscription < ActiveRecord::Base belongs_to :user, :foreign_key => :user_id end
现在我想制作一个用户可以在其帐户中订阅高级服务的UI部分。因此,我想先制作一个简单的版本,用户可以通过单击复选框来订阅。这是到目前为止我得到的东西
<%= render :partial => "my_account_leftbar" %> <% form_for @subscription, :url => subscribe_user_path(current_user) do |f| %> <%= (f.check_box :type?) %> <%= f.submit "Subscribe", :class => "button mr8" %> <% end %>
问题:
- 应用程序插入了记录到数据库中,但我在表单中定义的属性(类型)没有设置(它应该设置为“1”,表示“标准订阅”)。如何让应用程序设置此属性?
- 如何设置FK?我假设Rails应该自动设置FK,这种假设是否正确?
- 如何设置其他值“开始时间”和“结束时间?这些是日期时间(时间戳)值...
我已经用尽了初学者的rails知识,真的很感谢任何帮助...
admin 更改状态以发布 2023年5月23日
我也解决了问题2和3,总结如下:
-
插入记录:如Wahaj的答案所述,将列“type”的名称更改为例如“subscription_type”有所帮助。我按照此处描述的方法创建了一个单独的迁移:如何在Ruby on Rails迁移中重命名数据库列?
-
存储FK:更新了控制器中的操作。而不仅仅写
@subscription = Subscription.new(params[:subscription])
我编写了以下方法来创建“用户的订阅”
@subscription = current_user.subscriptions.build(params[:subscription])
-
存储“started_at”:在控制器中添加了一种方法:
@subscription.update_attributes(:started_at => Time.zone.now)