条件“attr_accessible”在 Ruby on Rails 中使用 ActiveResource
我有两个 RoR3 应用程序:
http://users.domain.local
http://profiles.domain.local
我创建了“users/models/profile.rb” :
class Profile < ActiveResource::Base
self.site = "http://profiles.domain.local"
end
在“profiles/models/profile.rb”中,我有:
attr_accessible :name
我的配置文件的 SQL 表包含以下列:
- id
- name
- user_id
因此,如果我运行 Profile.create(:name => "test_name")
a新的配置文件将在 http://profiles.domain.local
中创建,名称为“test_name”。
出于明显的安全原因,我不想访问“user_id”属性,但我需要在从“用户”应用程序创建配置文件时设置该属性。
我尝试了很多方法来做到这一点,但我找不到简单的解决方案。也许,可以在“profile”应用程序的“attr_accessible”附近使用 if
语句来填充来自“user”应用程序的请求。
有人可以帮助我吗?
I have two RoR3 application:
http://users.domain.local
http://profiles.domain.local
I created the 'users/models/profile.rb':
class Profile < ActiveResource::Base
self.site = "http://profiles.domain.local"
end
In 'profiles/models/profile.rb' I have:
attr_accessible :name
My profile's SQL table contains these columns:
- id
- name
- user_id
So if I run Profile.create(:name => "test_name")
a new profile will be created in http://profiles.domain.local
with the name "test_name".
For obvious security reasons, I don't want to make accessible the 'user_id' attribute, but I need to set that on the profile creation from the 'users' application.
I tryed a lot of way do make that, but I can't find an easy solution. Maybe, it is possible with an if
statement near the 'attr_accessible' of the 'profile' application that fill a request from the 'user' application.
Can somebody help me?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以尝试类似 Amazon Web Services 所做的事情:对每个请求使用一个非常长的、随机生成的密钥。检查您的个人资料应用程序中的密钥是否正确,如果正确,请更新属性。
You could try something like what Amazon Web Services does: use a very long, randomly generated key with each request. Check that key is correct in your profiles app, and if yes, update the attribute.
解决方案:不要简单地使用
Profile.create
,而是使用关联构建器。保护user_id
属性并使用user.profiles.create!(params[:profile])
让它自动设置配置文件的user_id
字段无论user
对象是什么。Solution: Don't use simply
Profile.create
, use the association builders instead. Protect theuser_id
attribute and useuser.profiles.create!(params[:profile])
to have it automatically set theuser_id
field for profiles to whatever theuser
object is.