Это мой код:
класс OrdersController
def create
@order = Order.new(params[:order])
if @order.purchase
work = GATEWAY.store(credit_card, options)
result = work.params['billingid']
current_user.update_attributes(:billing_id => result)
end
end
end
billingid
возвращается при запуске GATEWAY.store(credit_card, options)
Я пытаюсь сохранить это возвращенное billingid
в столбце :billing_id
в модели пользователя. Нельзя ли обновить атрибут модели пользователя из объекта, отличного от UsersController?
Проще говоря, нельзя ли обновить атрибут модели №1 с контроллера модели №2?
Спасибо
ОБНОВЛЕНИЕ: с помощью приведенных ниже мужчин я смог проверить две вещи: 1. результат = work.params ['billingid'] возвращает строку 2. Я могу сохранить в другой модели с любого контроллера
Однако, несмотря на то, что у меня есть attr_accessible :billing_id, я все еще не могу сохранить результат в столбце billing_id таблицы User. Мне удалось сохранить результат в столбце store_name таблицы Store, поэтому я не знаю, что именно в модели пользователя мешает мне сохранить.
я побежал,
@mystore = Store.find(current_user)
@mystore.store_name = result
@mystore.save
и это было успешно. Но,
@thisuser = User.find(current_user)
@thisuser.billing_id = result
@thisuser.save
Это не удается, даже если атрибут attr_accessible установлен правильно. Что еще может помешать сохранить определенные атрибуты, кроме attr_accessible? Всем спасибо!
ОБНОВЛЕНИЕ 2: Модель пользователя
требуется «дайджест»
класс Пользователь ‹ ActiveRecord::Base
has_one :store
has_many :products
attr_accessor :password
# attr_accessible was commented out completely just to check as well. Neither worked
attr_accessible :name, :email, :password, :password_confirmation, :username, :billing_id
validates :name, :presence => true,
:length => { :maximum => 50 }
validates :email, :presence => true,
:format => { :with => email_regex },
:uniqueness => { :case_sensitive => false }
validates :password, :presence => true,
:confirmation => true,
:length => { :within => 6..40 }
username_regex = /^([a-zA-Z0-9]{1,15})$/
before_save :encrypt_password
def has_password?(submitted_password)
encrypted_password == encrypt(submitted_password)
end
private
def encrypt_password
self.salt = make_salt if new_record?
self.encrypted_password = encrypt(password)
end
def encrypt(string)
secure_hash("#{salt}--#{string}")
end
def make_salt
secure_hash("#{Time.now.utc}--#{password}")
end
def secure_hash(string)
Digest::SHA2.hexdigest(string)
end
конец конец
ОБНОВЛЕНИЕ: РЕШЕНИЕ, используя @thisusers.errors, я смог узнать, что он пытался проверить наличие пароля во время этого запроса. Как только я это прокомментировал, он сохранился без проблем. Я не уверен, почему это происходит, но я возьму это отсюда. Всем спасибо спец. дмарков!
current_user
— это доступный метод, который возвращает экземпляр модели с атрибутомbilling_id
(предположительноUser
). - person Steve Jorgensen   schedule 08.04.2011