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