伙计们,我在过去两天遇到了一个问题,我不知道我的代码出了什么问题。我有两个名为'post'和'descrip'的模型。 Descrip belongs_to post as post has_one descrip。因此,当我提交表单进行发布时,下一个表单将出现,这是描述。我有一个隐藏的字段来传递post_id。但是当我提交描述表单时出现错误,显示“没有id就找不到POST”。下面是我的代码 在视野中
<%= form_for :descrip, url:{action: "create", :controller => "descriptions"} do |f| %>
<li>
<%= f.label 'Detail' %><br>
<%= f.text_field :detail %>
</li>
<li>
<%= f.hidden_field :post_id , :value => @post.id %>
</li>
<li>
<%= f.submit %>
</li>
<% end %>
在Descriptions_controller中
def new
@descrip = Descrip.new
end
def create
@post = Post.find(params[:descrip][:post_id])
@descrip = @post.descrips.build(descrip_params)
if @descrip.save
render @post
else
render 'new'
end
end
帖子和描述模型
class Post < ActiveRecord::Base
has_one :descrip, :dependent => :destroy
end
class Descrip < ActiveRecord::Base
belongs_to :post
end
resources.rb
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
请建议我应该做什么。如何解决我的错误以及如何在我的decrips
表格中获取post_id.Please。
答案 0 :(得分:0)
似乎有两种可能性。
1)首先,可能是你的参数不是你认为的那样,并插入了Post.find()
的无效数字。你能分享你的params看起来像什么吗?
2)如果情况并非如此,您可能会在尚未保存的帖子上调用id,因此无法在数据库中找到ActiveRecord。如果您提交此表单以及表单来创建帖子,则可能首先保存说明。确保您的帖子存在于数据库中,或者在说明之前保存以解决此问题。
出于好奇,您是否有任何理由将其描述为与帖子分开的表格?看起来你可以节省很多麻烦,只需将它作为posts表中的文本列。
答案 1 :(得分:0)
在您的操作中添加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
值。
如果params或不通过尝试
<%= hidden_field_tag 'descrip[post_id]', @post.id %>