rails form - флажки, FK и datetime -> как хранить эти атрибуты в БД? - PullRequest
0 голосов
/ 26 октября 2011

(рельсы 2.2.2)

У меня 2 модели, пользователь и подписка. Каждый пользователь может иметь одну или несколько подписок (= услуги премиум-класса). Ниже атрибутов:

  • пользователь: id, имя пользователя, ...
  • подписка: идентификатор, идентификатор_пользователя (FK), тип, начальный_от, оконченный_ат

Занятия:

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

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

Теперь я хочу сделать часть пользовательского интерфейса, где существующие пользователи могут подписаться в своей учетной записи на услуги премиум-класса. Поэтому я хотел сделать первую простую версию, где пользователь может подписаться, установив флажок. Это то, что я так далеко

<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», что означает «стандартная подписка»). Как заставить приложение установить этот атрибут?
  2. как настроить ФК? Я предполагаю, что рельсы должны установить FK автоматически, это предположение верно?
  3. как установить другие значения 'start_at' и 'termin_at? Это значения даты и времени (отметка времени) ...

Просто исчерпайте мои знания по рельсам для начинающих, любая помощь действительно ценится ...

Ответы [ 2 ]

4 голосов
/ 26 октября 2011

'Тип' - это зарезервированное слово ruby ​​on rails, которое следует использовать только при использовании наследования одной таблицы. Вам следует переименовать имя столбца в другое.

2 голосов
/ 27 октября 2011

Я мог бы решить и другие вопросы 2 и 3, завернув их:

  1. вставить запись: как указано в ответе Wahaj, переименовав столбец «type», например, в. "subscription_type" помог. Я создал отдельную миграцию, как описано здесь: Как переименовать столбец базы данных в миграции Ruby on Rails?

  2. сохранение FK: обновлено действие в контроллере. Вместо того, чтобы просто писать

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

    Я написал следующий метод для создания «подписки пользователя»

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

  3. Хранение начатого элемента: добавлен метод в контроллер:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...