Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将ID值传递给控制器,获取批量分配安全错误_Ruby On Rails_Forms_Controller_Attr Accessible - Fatal编程技术网

Ruby on rails 将ID值传递给控制器,获取批量分配安全错误

Ruby on rails 将ID值传递给控制器,获取批量分配安全错误,ruby-on-rails,forms,controller,attr-accessible,Ruby On Rails,Forms,Controller,Attr Accessible,我有一个消息模型和一个用户模型。我的信息属于我的用户,用户有许多信息 我试图允许一个用户在其公共配置文件页面(其显示模板)上向另一个用户发送私人消息。我尝试了很多尝试,但最终还是遇到了一个问题,那就是要求一个ID可以访问attr\u(我听说这样做不好)。我做错什么了吗 在我的消息模型中,我有:user\u id(它是当前用户,也称为a从id>发送消息),:to\u id,:content 当我查看用户配置文件页面时,在show模板上 <%= form_for([current_us

我有一个消息模型和一个用户模型。我的信息
属于
我的用户,用户
有许多
信息

我试图允许一个用户在其公共配置文件页面(其显示模板)上向另一个用户发送私人消息。我尝试了很多尝试,但最终还是遇到了一个问题,那就是要求一个ID可以访问
attr\u
(我听说这样做不好)。我做错什么了吗

在我的消息模型中,我有
:user\u id
(它是当前用户,也称为a
id>发送消息),
:to\u id
:content

当我查看用户配置文件页面时,在show模板上

    <%= form_for([current_user, @message])  do |f| %>
        <%= f.hidden_field :to_id, :value => @user.id %>
        <div class="field">
          <%= f.text_area :content, placeholder: "Send a private message..." %>
        </div>
        <%= f.submit "Post", class: "btn btn-large btn-primary" %>
    <% end %>
当表单提交时,它将转到我的消息创建操作

def create
    @message = current_user.messages.build(params[:message])
    redirect_to user_path(params[:message][:to_id])
end
然而,我总是得到错误

`Can't mass-assign protected attributes: to_id`
似乎我可以通过设置
:to\u id attr\u accessible
来修复它,但是我听说这样做并不安全。我做错什么了吗?这个问题一直在折磨着我


任何帮助都将不胜感激。谢谢

访问_id
很好。但如果您不希望出现此错误,请按如下方式进行修复:

def create
    @message = current_user.messages.build
    @message.to_id = params[:message][:to_id]
    # manually assign whatever other params you need to
    redirect_to user_path(params[:message][:to_id])
end
批量分配只是意味着您不能使用
更新\u属性
,您仍然可以使用
模型。属性=
。这样做的原因可能是添加额外的白名单参数,例如:

def create
  safe_params = params[:model].slice(:safe_attr1,:safe_attr2)
  @model = Model.new(safe_params)
  whitelist = ['some_safe_string','another_safe_string']
  if whitelist.include?(params[:model][:dangerous])
    @model.dangerous_attribute = params[:model][:dangerous]
  end
  @model.save
  redirect_to @model
end

在我编辑这个之前,你必须处理一些!非常感谢你的再次帮助(谢谢你的解释)。这很有帮助。一开始我想,除非我让它成为可访问的属性,否则我无法以任何方式保存
def create
  safe_params = params[:model].slice(:safe_attr1,:safe_attr2)
  @model = Model.new(safe_params)
  whitelist = ['some_safe_string','another_safe_string']
  if whitelist.include?(params[:model][:dangerous])
    @model.dangerous_attribute = params[:model][:dangerous]
  end
  @model.save
  redirect_to @model
end