Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 4找不到没有ID的帖子_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 不能';使用rails 4找不到没有ID的帖子

Ruby on rails 不能';使用rails 4找不到没有ID的帖子,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,伙计们,我最近两天遇到了一个问题,我不知道我的代码出了什么问题。我有两个模型,名字是“post”和“descripp”。descripp属于post,因为post有一个descripp。所以,当我提交表单进行post时,会出现下一个表单,即用于描述的表单。我描述表单时,有一个隐藏字段要传递post\u id。但当我提交描述表单时,会出现一个错误,即“没有id,无法找到帖子”。下面是我的代码 鉴于 后描述模型 class Post < ActiveRecord::Base has_o

伙计们,我最近两天遇到了一个问题,我不知道我的代码出了什么问题。我有两个模型,名字是“post”和“descripp”。descripp属于post,因为post有一个descripp。所以,当我提交表单进行post时,会出现下一个表单,即用于描述的表单。我描述表单时,有一个隐藏字段要传递post\u id。但当我提交描述表单时,会出现一个错误,即“没有id,无法找到帖子”。下面是我的代码 鉴于

后描述模型

 class Post < ActiveRecord::Base
   has_one :descrip, :dependent => :destroy
 end

 class Descrip < ActiveRecord::Base
   belongs_to :post
 end

请建议我应该做什么。我如何解决我的错误以及如何在我的
decrips
表中获取post\u id。请。

似乎有两种可能性

1) 首先,可能是您的参数与您想象的不同,并且为
Post.find()
插入了无效的数字。你能分享一下你的情妇长什么样吗

2) 如果不是这样的话,您可以在尚未保存的帖子上调用id,因此ActiveRecord无法在您的数据库中找到该帖子。如果您将此表单与表单一起提交以创建帖子,则可能首先保存描述。请确保您的帖子存在于数据库中,或者在描述之前已保存以修复此问题


出于好奇,你有什么理由把描述从post中分离出来?如果将其设置为posts表中的文本列,似乎可以省去很多麻烦。

在操作中添加
logger.info

def create
 logger.info "---params ==> #{params.inspect}---"
 @post = Post.find(params[:descrip][:post_id])
 @descrip = @post.descrips.build(descrip_params)
 if @descrip.save
  render @post
 else
 render 'new'
end
结束

运行应用程序,然后在
log/development.rb
文件中,您可以查看所有
params
值。 如果参数未通过,请尝试使用

谢谢回复@Tsiege.in descripp中我只传递了一个参数,即
params.require(:descripp)。permit(:detail)
。我在post表单之后提交了DESRIP表单。post表单提交成功,但当我提交DESRIP时,出现了错误。您应该检查从浏览器本身返回的参数,以仔细检查其格式。插入绑定。在控制器中创建def后立即撬开线路,并在终端中输入
params
。结果是一系列嵌套哈希。复制并粘贴到你的下一条评论中;这将有助于为我们澄清您的问题。请确保您的gem文件中有
gem'pry'
以使用pry。感谢您的回复,但我仍然面临问题。我使用了绑定撬,但当我提交表单时,post id看起来是空的。新的问题是,现在隐藏字段上的错误是形式错误。
@post.id%>
在这个字段中,我得到了一个错误,即nil:NilClass`的
未定义方法
id'。请建议我应该做什么。严格按照我说的说明操作,并将binding.pry中params的返回值粘贴到您的响应中。另一个问题是,您没有将post实例从控制器传递到视图。您的
defnew
方法需要
@post=post.new
。但是这将把新的描述保存到一个新的帖子中,而不是一个特定的帖子。感谢回复@Kingston我的参数是
def descripp_params.require(:descripp)。permit(:detail)结束
表单
到控制器传递到控制器的所有值是什么。在日志文件中,您可以看到它。请共享该值。或者在
def create中,或在
添加
logger.info”---params=>{params.inspect}-“
中,然后查看日志文件中描述控制器的新操作@post对象未分配任何内容。感谢你们的回复,但我仍然面临问题。我使用了绑定撬,但当我提交表单时,post id看起来是空的。新的问题是,现在隐藏字段上的错误是形式错误。
@post.id%>
在这个字段中,我得到了一个错误,即nil:NilClass`的
未定义方法
id'。请建议我应该做什么。谢谢你们的回复,但我仍然面临问题。我使用了绑定撬,但当我提交表单时,post id看起来是空的。新的问题是,现在隐藏字段上的错误是形式错误。
@post.id%>
在这个字段中,我得到了一个错误,即nil:NilClass`的
未定义方法
id'。请建议我应该做什么。@kigston当我使用建议的隐藏字段文本时,仍然会出现错误。现在
@post
即将出现
nil
,所以只有该错误才会出现。请检查
@post
为什么会出现
nil
。现在
@post.try(:id)%>
非常感谢你@kingston,现在我在隐藏字段上没有任何错误,但是当我提交表单时,我在他的行
@post=post.find(params[:descripp][:post\u id])上的description controller中得到错误。
。这行写着没有ID就找不到帖子。请帮我找到新的@descripp=descripp.new end
,因为你找不到
@Post
,请找到
@Post
。。。
 class Post < ActiveRecord::Base
   has_one :descrip, :dependent => :destroy
 end

 class Descrip < ActiveRecord::Base
   belongs_to :post
 end
resources :descriptions
get "descriptions/new", :to => "descriptions#new", as: :descriptions_new
post "descriptions/create/:id", :to => "descriptions#create", as::descriptions_create

resources :posts do
  resources :descriptions
end
def create
 logger.info "---params ==> #{params.inspect}---"
 @post = Post.find(params[:descrip][:post_id])
 @descrip = @post.descrips.build(descrip_params)
 if @descrip.save
  render @post
 else
 render 'new'
end