Сохранить входные данные из текстового поля в таблицу, отличную от основной модели построителя форм?- Rails3 - PullRequest
1 голос
/ 23 августа 2011

TL; DR

Я хочу проверить свою таблицу Coupon, когда новый пользователь регистрируется, чтобы увидеть, существует ли этот код купона.Если это так, примените соответствующую скидку, например coupon.discount_amount, к учетной записи этого нового пользователя.Но это только одно поле в форме new user registration (форма, принадлежащая модели User).

Длинная версия

Я использую Deviseуправлять моей регистрацией пользователей и логинами.

Вот так выглядит мой registration/new/index.html.erb вид:

<% @user.plan_id = params[:plan_id] %>

    <%= devise_error_messages! %><br />

    <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

        <% if !params[:promo] %>
        <%= f.collection_select :plan_id, @plan, :id, :display_name, :prompt => "Choose yourself up a real nice plan" %><br />
        <% end %>
        <%= f.text_field :username, :placeholder => "Desired Username" %><br />
        <%= f.text_field :first_name, :placeholder => "First Name" %><br />
        <%= f.text_field :last_name, :placeholder => "Last Name" %><br />
        <%= f.password_field :password, :placeholder => "Password" %><br />
        <%= f.password_field :password_confirmation, :placeholder => "Password" %><br />
        <%= f.text_field :email, :placeholder => "Email Address" %><br />
        <% if params[:promo] %>
            <%= f.text_field :xcode, :placeholder => "Coupon Code" %><br /> 
        <% end %>
        <div class="settings_button">
            <%= f.submit "Sign in", :id => "register", :value => "Register", :class => "pill button" %>
        </div>

<% end %>

Строка, о которой идет речь, - это строка, которая говорит <%= f.text_field :xcode, :placeholder => "Coupon Code" %><br />.

Каждое другое поле соответствует столбцу в моей User модели ... но это должно соответствовать довольно сложной ассоциации.

Например, скажем test = User.find('test').

Тогда код купона, введенный Test, будет сохранен в test.subscriptions.last.coupon.code.

Поэтому я хочу сделать две вещи ... когда Test вводит код купона: 4gHu7k, я хочусделать Coupon.find('4gHu7k').Если он существует, я хочу установить следующее (при условии, что этот новый купон будет иметь идентификатор 5): test.subscriptions.last.coupon_id.

Схема для моей модели подписки выглядит следующим образом:

class Subscription < ActiveRecord::Base
    belongs_to  :plan
    has_one :coupon
end


# == Schema Information
#
# Table name: subscriptions
#
#  id                   :integer         not null, primary key
#  status               :string(255)
#  plan_id              :integer
#  payment_method_token :string(255)
#  created_at           :datetime
#  updated_at           :datetime
#  user_id              :integer
#  period_start         :datetime
#  period_end           :datetime
#  coupon_id            :integer
#

Надеюсь, я четко объяснил, что мне нужно, дайте мне знать, если вам нужна дополнительная информация.

Спасибо.

PS Когда я запускаю все как есть, яполучите следующее:

undefined method `xcode' for #<User:0x00000103583d70>

Что находится вокруг этой линии.

1 Ответ

2 голосов
/ 23 августа 2011

Я бы предложил вместо использования f.text_field, почему бы вам не попробовать text_field_tag? <% = text_field_tag ​​"sample"%>

Теперь вы можете получить доступ к этому значению в контроллере как params [: sample]. Надеюсь, это поможет.

Приветствие.

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