首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >rails,如何在控制器中检索:id属性

rails,如何在控制器中检索:id属性
EN

Stack Overflow用户
提问于 2012-04-23 06:30:40
回答 2查看 1.6K关注 0票数 0

我正在尝试创建一个简单的私人消息传递系统

我有一个嵌套的路由

代码语言:javascript
运行
复制
resources :users do
   resources :messages
end

在我的用户展示页面上,我有...

代码语言:javascript
运行
复制
    <%= form_for([current_user, @message])  do |f| %>
      <div class="field">
        <%= f.text_area :content, placeholder: "Send a private message..." %>
      </div>
      <%= f.submit "Post", class: "btn btn-large btn-primary" %>
    <% end %>

其中当前用户可以向当前正在查看的用户发送私人消息。

在我的message.rb上我有...

代码语言:javascript
运行
复制
belongs_to :user

在user.rb我有..。

代码语言:javascript
运行
复制
has_many :messages

在我的用户控制器上显示我拥有的操作

代码语言:javascript
运行
复制
def show
 @user = User.find(params[:id])
 @microposts = @user.microposts.paginate(page: params[:page])
 if user_signed_in?
    @message = current_user.messages.build(params[:messages])
 end

end

当用户点击我的显示模板上的提交按钮时,它转到我的消息创建操作,但是我无法获得我正在查看(或试图发送到)的用户的id

我打印出了我的消息变量,它说...

代码语言:javascript
运行
复制
[#<Message id: nil, content: nil, user_id: 1, to_id: nil, created_at: nil, updated_at: nil>]

:user_id是当前用户(即我,id为1),但是我似乎无法获取to_id (这就是我刚才看到的用户,假设他的id为2)

有人能告诉我怎样才能找回它吗?我只能将id作为隐藏字段进行传递,但我听说这样做是不安全的。

我们将非常感谢您的帮助。谢谢

更新:@Andrew

嗯,实际上这很有趣,因为如果我这样做了..。

代码语言:javascript
运行
复制
@message = current_user.messages.build(to_id: @user.id)

我就进去了

代码语言:javascript
运行
复制
<%= f.hidden_field :to_id, :value => @user.id %>

我得到了一个

代码语言:javascript
运行
复制
Can't mass-assign protected attributes: to_id. 

有人知道为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-23 06:52:55

把一个UserID放在一个隐藏的字段中并没有错,一开始它在URL中是可见的。

如果您在show操作中添加了to_id,并且在表单中有一个隐藏字段,那么当表单发布时,它将从users#show操作流向message表单,然后流向messages#create操作。

代码语言:javascript
运行
复制
def show
 @user = User.find(params[:id])
 @microposts = @user.microposts.paginate(page: params[:page])
 if user_signed_in?
    @message = current_user.messages.build(to_id: @user.id)
 end

end

请注意,show操作没有接收任何params:messages,因为您没有发送到这里。除非您的URL类似于:users/1?messages=foo,否则params值将始终为nil。

票数 1
EN

Stack Overflow用户

发布于 2012-04-23 06:55:14

在您的显示页面上,放入一个隐藏字段。

代码语言:javascript
运行
复制
<%= form_for([current_user, @message])  do |form| %>
  <%= form.hidden_field :to_id, :value => @user.id %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10272692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档