【问题标题】:rails, how to retrieve an :id attribute in controllerrails,如何在控制器中检索 :id 属性
【发布时间】:2012-04-22 22:30:40
【问题描述】:

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

我有一个嵌套路由

resources :users do
   resources :messages
end

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

    <%= 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 上我有...

belongs_to :user

在 user.rb 我有...

has_many :messages

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

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

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

[#<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

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

@message = current_user.messages.build(to_id: @user.id)

我进去了

<%= f.hidden_field :to_id, :value => @user.id %>

我得到一个

Can't mass-assign protected attributes: to_id. 

有人知道为什么吗?

【问题讨论】:

    标签: ruby-on-rails forms controller


    【解决方案1】:

    将 UserID 放在隐藏字段中没有任何问题,它在开头的 URL 中是可见的。

    如果您在 show 操作中添加 to_id 并在表单中有一个隐藏字段,它将从 users#show 操作流入消息表单,然后在该表单发布时流入 messages#create 操作.

    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 操作没有收到任何参数 [:messages],因为您没有发布到此。除非您的 URL 如下所示:users/1?messages=foo,否则该参数值将始终为零。

    【讨论】:

    • 嗯 :to_id attr_accessible 不好吗?
    • 等待 nvm。我实际上不需要让它 attri_accessible。我不知道为什么我以前必须这样做。我一定有什么问题。非常感谢您的帮助!
    【解决方案2】:

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

    <%= form_for([current_user, @message])  do |form| %>
      <%= form.hidden_field :to_id, :value => @user.id %>
    

    【讨论】:

    • 嗯 :to_id attr_accessible 不好吗?
    • 等待 nvm。我实际上不需要让它 attri_accessible。我不知道为什么我以前必须这样做。我一定有什么问题。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2023-03-10
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多