Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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 Rails,模型关系问题_Ruby On Rails_Activerecord_Ruby On Rails 3_Activemodel - Fatal编程技术网

Ruby on rails Rails,模型关系问题

Ruby on rails Rails,模型关系问题,ruby-on-rails,activerecord,ruby-on-rails-3,activemodel,Ruby On Rails,Activerecord,Ruby On Rails 3,Activemodel,我有以下几点非常有效: @request_thread = current_user.request_threads.new(params[:request_thread]) @requestable = find_requestable @request_thread = @requestable.request_threads.new(params[:request_thread]) 我有一个非常有效的方法: @request_thread = current_user.request_

我有以下几点非常有效:

@request_thread = current_user.request_threads.new(params[:request_thread])
@requestable = find_requestable
@request_thread = @requestable.request_threads.new(params[:request_thread])
我有一个非常有效的方法:

@request_thread = current_user.request_threads.new(params[:request_thread])
@requestable = find_requestable
@request_thread = @requestable.request_threads.new(params[:request_thread])
但如果我尝试第二行:

@request_thread = @requestable.current_user.request_threads.new(params[:request_thread])
对于当前用户,我得到以下错误:

NoMethodError (undefined method `current_user' for #<Photo:0x10f95c828>):
app/controllers/request_threads_controller.rb:52:in `create'
app/middleware/flash_session_cookie_middleware.rb:14:in `call'

错误消息会准确地告诉您出了什么问题:
当前用户对于
@requestable
对象不存在,不管是什么

当前用户
很可能是从
应用程序控制器
继承的函数,或者至少是它通常所在的位置。它通常根据当前会话返回用户对象。但这不是Rails的内置部分,所以如果您想让我更详细地介绍,我们需要更多信息

@requestable
看起来像一个多态模型实例,因此它不会知道当前会话


这里发生了一点Rails的魔力,我想这让你很困惑

@requestable.request\u threads
current\u user.request\u threads
都是Rails在这些对象上生成的帮助函数,通过过滤结果和自动填充值来节省时间

我认为,根据您迄今为止向我们展示的代码,您正试图将
当前用户
与您正在创建的新
请求线程
相关联。在这种情况下,您可以手动将其简单地合并到属性中。由于我不知道您的模型是什么样子,我只能猜测字段名称:

@request_thread = @requestable.request_threads.new( params[:request_thread].merge(:user => current_user) )
正如我所说,可链接函数只是为了方便。例如,您可以这样写:

@request_thread = request_thread.new(params[:request_thread])
@request_thread.requestable = find_requestable
@request_thread.user = current_user

也许是这样的@可请求。按用户(当前用户)查找。请求线程。新建(参数[:请求线程])谢谢Adam。没错,requestable是一个带有引用的多态模型。只是添加了find_requestable。还有其他有用的信息吗?thxsre current_user,更正它是用户对象,由Desive驱动。