关于rails form:rails form – checkboxes,FK和datetime – >如何在db中存储这些属性?

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 %>

问题:

  • 应用程序将记录插入到数据库中,但是我在表单(类型)中定义的属性尚未设置(它应设置为"1",代表"标准订阅")。如何让应用程序设置此属性?
  • 如何设置FK?我假设rails应该自动设置FK,这个假设是否正确?
  • 如何设置其他值'started_at'和'ended_at?那些是datetime(时间戳)值......
  • 刚刚用完我的初学者知识,任何帮助真的很感激......


    '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)