Условное 'attr_accessible' с использованием ActiveResource в Ruby on Rails - PullRequest
0 голосов
/ 11 января 2011

У меня есть два приложения RoR3:

Я создал 'users / models / profile.rb':

class Profile < ActiveResource::Base
  self.site = "http://profiles.domain.local"
end

В «профилях / моделях / profile.rb» у меня есть:

attr_accessible :name

Таблица SQL моего профиля содержит следующие столбцы:

  • ID
  • имя
  • user_id

Поэтому, если я запусту Profile.create(:name => "test_name"), в http://profiles.domain.local будет создан новый профиль с именем «test_name».

По очевидным причинам безопасности я не хочу делать доступным атрибут 'user_id', но мне нужно установить его при создании профиля из приложения 'users' .

Я пробовал много способов сделать это, но я не могу найти простое решение. Возможно, это возможно с помощью оператора if рядом с 'attr_accessible' приложения 'profile', который заполняет запрос от приложения 'user'.

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

1 голос
/ 11 января 2011

Вы можете попробовать что-то вроде того, что делает Amazon Web Services: использовать очень длинный, случайно сгенерированный ключ с каждым запросом.Убедитесь, что ключ верен в вашем приложении профилей, и если да, обновите атрибут.

0 голосов
/ 11 января 2011

Решение: не используйте просто Profile.create, используйте вместо этого построители ассоциаций. Защитите атрибут user_id и используйте user.profiles.create!(params[:profile]), чтобы он автоматически установил в поле user_id для профилей значение объекта user.

...