我有一个comments_controller,它使用inherited_resources并处理这个模型:Comment (belongs_to Shop and belongs_to User)和Shop (belongs_to User)。Rails 4.1.1和Inherited_resources v为1.5.0。
路线如下:
resources :shop do
resources :comments, only: [:create, :destroy]
end但是,下面的代码不起作用:
class CommentsController < InheritedResources::Base
before_filter :authenticate_user!
nested_belongs_to :user, :shop
actions :create, :destroy
def create
@comment = build_resource
@comment.shop = Shop.find(params[:hotel_id])
@comment.user = current_user
create!
end
def destroy
@hotel = Shop.find(params[:hotel_id])
@comment = Comment.find(params[:id])
@comment.user = current_user
destroy!
end
private
def permitted_params
params.permit(:comment => [:content])
endRspec测试创建/删除注释告诉我Couldn't find User without an ID。
谢谢你的帮助。
UPD是失败的测试之一:
let(:user) { FactoryGirl.create(:user) }
let(:shop) { FactoryGirl.create(:shop, user: user) }
describe "comment creation" do
before { visit shop_path(shop) }
describe "with invalid information" do
it "should not create a comment" do
expect { click_button "Post a comment" }.not_to change(Comment, :count)
end
end发布于 2014-09-19 14:42:55
从您的路线来看,您似乎想要处理属于Comments的Shop。在本例中,您不需要nested_belongs_to,而是在控制器中将其更改为belongs_to :shop,这将处理它。并分别添加另一行belongs_to :user。
因此,您的控制器将如下所示:
class CommentsController < InheritedResources::Base
before_filter :authenticate_user!
belongs_to :shop
belongs_to :user
actions :create, :destroy
.
.
.
endhttps://stackoverflow.com/questions/25935796
复制相似问题