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>
Что находится вокруг этой линии.