rails form - checkboxes, FK and datetime -> how to store those attributes in the db?
(rails 2.2.2)
我有2个型号,用户和订阅。每个用户可以拥有一个或多个订阅(=高级服务)。属性下面:
- user:id,username,...
- subscription:id,user_id(FK),type,started_at,ended_at
课程:
1 2 3 4 5 6 7 8 9 | class User < ActiveRecord::Base .. has_many :subscriptions, :dependent => :destroy .. end class Subscription < ActiveRecord::Base belongs_to :user, :foreign_key => :user_id end |
现在,我想创建UI部分,现有用户可以在其帐户中订阅高级服务。因此,我想制作第一个简单版本,用户可以通过单击复选框进行订阅。这是我到目前为止所得到的
1 2 3 4 5 6 7 8 9 10 11 | <%= render :partial =>"my_account_leftbar" %> <% form_for @subscription, :url => subscribe_user_path(current_user) do |f| %> <%= (f.check_box :type?) %> <!-- add '?'after the symbol, source: https://github.com/justinfrench/formtastic/issues/269 --> <%= f.submit"Subscribe", :class =>"button mr8" %> <% end %> |
问题:
刚刚用完我的初学者知识,任何帮助真的很感激......
'Type'是rails保留字上的ruby,只有在使用Single Table Inheritance时才能使用它。您应该将列名重命名为其他名称。
我也可以解决其他问题2和3,包装起来:
插入记录:如Wahaj的回答中所述,将列"类型"重命名为例如'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)