如何在数据库中存储Rails表单中复选框、FK和日期时间的属性?

13 浏览
0 Comments

如何在数据库中存储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. 应用程序插入了记录到数据库中,但我在表单中定义的属性(类型)没有设置(它应该设置为“1”,表示“标准订阅”)。如何让应用程序设置此属性?
  2. 如何设置FK?我假设Rails应该自动设置FK,这种假设是否正确?
  3. 如何设置其他值“开始时间”和“结束时间?这些是日期时间(时间戳)值...

我已经用尽了初学者的rails知识,真的很感谢任何帮助...

admin 更改状态以发布 2023年5月23日
0
0 Comments

我也解决了问题2和3,总结如下:

  1. 插入记录:如Wahaj的答案所述,将列“type”的名称更改为例如“subscription_type”有所帮助。我按照此处描述的方法创建了一个单独的迁移:如何在Ruby on Rails迁移中重命名数据库列?

  2. 存储FK:更新了控制器中的操作。而不仅仅写

    @subscription = Subscription.new(params[:subscription])

    我编写了以下方法来创建“用户的订阅”

    @subscription = current_user.subscriptions.build(params[:subscription])

  3. 存储“started_at”:在控制器中添加了一种方法:

    @subscription.update_attributes(:started_at => Time.zone.now)

0
0 Comments

'Type'是Ruby on Rails保留的关键字,只有在使用Single Table Inheritance时才应该使用它。您应该将列名更改为其他名称。

0