Formtastic и Formtaghelper - PullRequest
       18

Formtastic и Formtaghelper

0 голосов
/ 21 октября 2009

Я хотел бы создать форму регистрации пользователя, в которой пользователь отмечает некоторые поля, которые не связаны с моделью.

Например, может быть поле «условия и положения», в котором я не хочу иметь логическое поле в модели пользователя с надписью «отмеченные положения и условия». Вместо этого я хочу создать запись в другом месте (например, транзакцию), в которой будет записана дата / время, когда они приняли условия и положения.

Другим примером может быть какое-то предпочтение, которое они указали, что я буду использовать позже и пока держу в сеансе, как «запомнить меня».

Я могу смешивать эти типы полей с обычным помощником формы. Как я могу сделать один из приведенных выше примеров при использовании formtastic? Это своего рода прилипание к тому, чтобы смешивать традиционные метки рельсов с красивым чистым кодом формы.

Ответы [ 3 ]

1 голос
/ 10 января 2010

Я склонен не согласиться с подходом использования attr_accessors для элементов входа, специфичных для действий. Если необходимо записать ТиС, тогда это имеет смысл, но иногда вам нужны данные, которые действительно не связаны с моделью и связаны только с конкретным конкретным действием, например, «выполнить некоторую тяжелую операцию при выполнении действия».

Допустим, у вас есть форма регистрации, и вы не используете OAuth, и у вас есть возможность указать имя пользователя и пароль в твиттере при регистрации. Это нормально:

<%= form.input :twitter_username %>
<%= form.input :twitter_password, :as => :password %>

Но этот бит ниже сбивает меня с толку - это как formtastic в этом случае фактически забирает то, что уже есть. Есть ли способ добавить params [: your-object], в то же время заставляя formastic делать все свои приятные вещи в макете?

Как насчет:

class User < ActiveRecord::Base
...
  #I don't want this here. Its only for UserController#create.
  #attr_accessor :tweet_when_signed_up 
...
end

и

<%= form.input :tweet_when_signed_up, :as => :checkbox, :param_only => true %>

param_only - мое выдуманное предложение. Он говорит: «Это даже не временное свойство. Это только для этого действия.

class UserController < ActionController::Base
...

def create
  if params[:tweet_when_signed_up] # haven't done this yet -- == 1 or !.nil?
     Tweeter.tweet( ... )
  end
  @user = User.create( params[:user] )
end

Способность делать это, вероятно, есть - кто-нибудь знает, как эффективно делать то, что я считаю хорошей идеей выше?

спасибо!

1 голос
/ 21 октября 2009

Вы можете создать любое количество виртуальных атрибутов в вашей модели, которые не обязательно должны быть привязаны к столбцу базы данных. Добавление attr_accessor: terms_and_conditions в вашу пользовательскую модель сделает это «поле» доступным для formtastic - даже если это не поле базы данных. Вы можете проверить его как любое другое поле или создать собственный метод установки для создания записи в другом месте, если это то, что вам нужно.

0 голосов
/ 22 октября 2009

Вместо этого я хочу создать запись где-то еще (как транзакция) который записал дату / время они принял T & Cs.

Используйте attr_accessor, который описывает Бенси, чтобы интегрировать поле с formtastic.

Formtastic относится к логике представления, в то время как отношения являются более модельной логикой. Не беспокойтесь о создании связанной записи в форме. Вместо этого используйте обратные вызовы, такие как before_update и after_save в модели, чтобы убедиться, что соответствующая запись была создана.

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