【问题标题】:rails form - checkboxes, FK and datetime -> how to store those attributes in the db?rails form - checkboxes, FK and datetime -> 如何将这些属性存储在数据库中?
【发布时间】:2011-12-15 22:24:03
【问题描述】:

(轨道 2.2.2)

我有 2 个模型,用户和订阅。每个用户可以拥有一个或多个订阅(= 高级服务)。属性下方:

  • 用户:ID、用户名、...
  • 订阅:id、user_id (FK)、类型、started_at、ended_at

类:

class User < ActiveRecord::Base
  ..
  has_many :subscriptions, :dependent => :destroy
  ..
end

class Subscription < ActiveRecord::Base
  belongs_to :user, :foreign_key => :user_id
end

现在我想制作 UI 部分,现有用户可以在其帐户中订阅高级服务。因此,我想制作第一个简单的版本,用户可以通过单击复选框来订阅。这就是我目前所得到的

<div class = 'wrapper'>
  <%= render :partial => "my_account_leftbar" %>

  <% form_for @subscription, :url => subscribe_user_path(current_user) do |f| %>
  <div class="field">
    <%= (f.check_box :type?) %>      <!-- add '?'after the symbol, source: https://github.com/justinfrench/formtastic/issues/269 -->
  </div>

  <div class="actions">
    <%= f.submit "Subscribe", :class => "button mr8" %>
  </div>
  <% end %>
</div>

问题:

  1. 应用程序向数据库中插入了一条记录,但我在表单(类型)中定义的属性尚未设置(它应该设置“1”,代表“标准订阅”)。如何让app设置这个属性?
  2. 如何设置FK?我假设 rails 应该自动设置 FK,这个假设是否正确?
  3. 如何设置其他值'started_at'和'ended_at?这些是日期时间(时间戳)值...

刚用完我的初学者 Rails 知识,非常感谢任何帮助...

【问题讨论】:

    标签: ruby-on-rails forms checkbox


    【解决方案1】:

    'Type' 是一个 ruby​​ on rails 保留字,只应在使用单表继承时使用。您应该将列名重命名为其他名称。

    【讨论】:

    • 成功了,谢谢。我还设法保存了其他属性。
    【解决方案2】:

    我也可以解决其他问题 2 和 3,总结一下:

    1. 插入记录:如 Wahaj 的回答中所述,将“类型”列重命名为例如'subscription_type' 有帮助。我创建了一个单独的迁移,如下所述:How can I rename a database column in a Ruby on Rails migration?

    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)

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多