使用rails 4无法找到没有ID的帖子

时间:2014-04-26 18:18:16

标签: ruby-on-rails ruby ruby-on-rails-4

伙计们,我在过去两天遇到了一个问题,我不知道我的代码出了什么问题。我有两个名为'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。

2 个答案:

答案 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 %>