Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 试图获取保存在隐藏字段中的当前用户的值_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 试图获取保存在隐藏字段中的当前用户的值

Ruby on rails 试图获取保存在隐藏字段中的当前用户的值,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个简单的rails应用程序,在其中一个表单中,我试图使用隐藏字段标记将当前用户的值保存到字段中 我的应用程序控制器具有user_authenticate方法,该方法还设置@current_user的值,如下所示 应用控制器 class ApplicationControllersessions',:action=>login) 返回错误 结束 结束 def保存_登录_状态 如果会话[:用户\u id] 将_重定向到(:controller=>sessions',:action=>home

我有一个简单的rails应用程序,在其中一个表单中,我试图使用隐藏字段标记将当前用户的值保存到字段中

我的应用程序控制器具有user_authenticate方法,该方法还设置@current_user的值,如下所示


应用控制器
class ApplicationControllersessions',:action=>login)
返回错误
结束
结束
def保存_登录_状态
如果会话[:用户\u id]
将_重定向到(:controller=>sessions',:action=>home)
返回错误
其他的
返回真值
结束
结束
结束
收据模型定义为“用户所属”,如下所示。 接收模型
类收据
表单的视图有一个隐藏的字段标记,如下所示。 形式

禁止保存此收据:



@当前用户%>
然而,当我保存记录时,我得到一个错误——“用户必须存在”。所以本质上,用户字段是“nil”

我的收据控制器是这样的


接收器控制器
class ReceiptsController
如果您有Desive,这应该可以为您完成,注意非实例变量,没有@

  <div class="field">
    <%= f.hidden_field :user_id, :value => current_user.id %>
  </div>

当前用户id%>
否则,在你的情况下

  <div class="field">
    <%= f.hidden_field :user_id, :value => @current_user.id %>
  </div>

@当前用户id%>

如果您有Desive,这应该可以为您完成,注意非实例变量,没有@

  <div class="field">
    <%= f.hidden_field :user_id, :value => current_user.id %>
  </div>

当前用户id%>
否则,在你的情况下

  <div class="field">
    <%= f.hidden_field :user_id, :value => @current_user.id %>
  </div>

@当前用户id%>

理想情况下,您不必在表单中呈现当前用户id,您已经有了识别用户的会话,只需在收据控制器中的当前用户下确定收据的范围:

class ReceiptsController < ApplicationController
  ...
  def create
    receipt = current_user.receipts.new(receipt_params)
    if receipt.save
      # redirect
    else
      # render new
    end
  end
end
class ReceiptsController

这还可以防止未经身份验证的用户能够更新其他人的收据。如果您正在对用户进行身份验证,并且有权访问控制器中的当前用户,那么这就是解决方法。

理想情况下,您不必在表单中呈现当前用户id,您已经有了识别用户的会话,只需在收据控制器中的当前用户下确定收据的范围:

class ReceiptsController < ApplicationController
  ...
  def create
    receipt = current_user.receipts.new(receipt_params)
    if receipt.save
      # redirect
    else
      # render new
    end
  end
end
class ReceiptsController

这还可以防止未经身份验证的用户能够更新其他人的收据。如果您正在对用户进行身份验证,并且有权访问控制器中的当前用户,那么这就是解决方法。

我尝试了此方法,但它给出了以下错误。未定义的局部变量或方法
current_user'for#
Extracted source(第28行附近):262728293031#POST/receipts.json def create@receipty=current_user.receipts.new(receipty_参数)response|to do | format | if@receipt.save`当然,您需要事先对用户进行身份验证,因此,在控制器中,将
置于\u操作之前:authenticate\u user
,当我在控制器中包含
置于\u操作之前:authenticate\u user
并且在我的视图中使用的隐藏字段为`@current\u user.id%>`时,它就起作用了,关键是你不需要该字段,你已经可以访问你控制器中的@current_user我尝试了这个,它给了我以下信息
class ReceiptsController < ApplicationController
  ...
  def create
    receipt = current_user.receipts.new(receipt_params)
    if receipt.save
      # redirect
    else
      # render new
    end
  end
end