修改
由于 carlosramireziii 帮助将表单更改为
,路由错误已消失<%= form_for (@micropost) do |f| %>
<%= fields_for :comments do |ff| %>
<%= ff.text_area :content %>
<% end %>
<div class="CommentButtonContainer">
<%= f.submit "Comment" %>
</div>
<% end %>
但现在问题是帖子不会保存,有什么建议吗?
我目前正在制作一个连接到:
的评论模型 micropost_id :integer
和user_id :integer
我继续收到的问题是,当我发布一些东西时,我会得到这个回报:
Routing Error
No route matches [POST] "/microposts/comments"
这是我的 routes.eb
Project::Application.routes.draw do
resources :microposts do
resources :comments
end
这是评论表
<%= form_for([@micropost, @micropost.comments.new]) do |f| %>
<%= f.text_area :content %>
<div class="CommentButtonContainer">
<%= f.submit "Comment" %>
</div>
<% end %>
这是评论模板
<%= div_for comment do %>
<div class='UserCommentContainer'>
<div class='UserComment'>
<div class='UserName sm'>
Anonymous
</div>
<div class='UserCommentText'>
<%= comment.content %>
</div>
</div>
</div>
<% end %>
最后这就是 Micropost
中的内容<div id='CommentContainer' class='Condensed2'>
<div class='Comment'>
<%= render "comments/form" %>
</div>
<div id='comments'>
<%= render @micropost.comments %>
</div>
</div>
其他与我在下面发布的评论模型和控制器相关的其他内容,我已经考虑了很长时间了,可以真正使用帮助,谢谢!
评论模型
class Comment < ActiveRecord::Base
attr_accessible :content
belongs_to :micropost
validates :content, presence: true, length: { maximum: 140 }
validates :user_id, presence: true
validates :micropost_id, presence: true
default_scope order: 'comments.created_at DESC'
end
Micropost模型
class Micropost < ActiveRecord::Base
belongs_to :user
has_many :comments
validates :user_id, presence: true
end
用户模型
class User < ActiveRecord::Base
has_many :microposts
has_many :replies, :through => :microposts, :source => :comments
end
评论控制器
class CommentsController < ApplicationController
def create
@comment = @micropost.comments.new(params[:comment])
if @comment.save
redirect_to @user
else
redirect_to @user
end
end
end
用户控制器
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@micropost = Micropost.new
@comment = @micropost.comments.new
@microposts = @user.microposts.paginate(page: params[:page])
end
end
答案 0 :(得分:2)
我认为问题在于您尝试在尚未保存的comment
上保存新的micropost
。由于您comments
路由嵌套在microposts
路由下,因此micropost
需要存在才能创建新评论。
如果要以相同的形式创建两个对象,则需要使用嵌套的模型属性。
<强>微柱强>
class Micropost < ActiveRecord::Base
belongs_to :user
has_many :comments
accepts_nested_attributes_for :comments
validates :user_id, presence: true
end
<强>表格强>
<%= form_for(@micropost) do |f| %>
<%= f.fields_for :comments do |ff %>
<%= ff.text_area :content %>
<% end %>
<div class="CommentButtonContainer">
<%= f.submit "Comment" %>
</div>
<% end %>