【发布时间】:2014-05-30 16:00:36
【问题描述】:
我正在努力让这个工作,我已经阅读了很多,但找不到这里的问题。
routes.rb
resources :scripts do
resources :reviews
resources :issues do
resources :comments
end
end
cmets_migration
create_table :comments do |t|
t.integer :issue_id
t.integer :user_id
t.text :body
t.timestamps
end
控制器动作
def create
@issue = Issue.find(params[:issue_id])
@comment = current_user.comments.build(comment_params)
@comment.issue_id = @issue.id
if @comment.save
redirect_to @comment, notice: 'Comment was successfully created.'
else
render :new
end
end
def new
@issue = Issue.find(params[:issue_id])
@comment = current_user.comments.new
@comment.issue_id = @issue.id
end
现在在我的Issues/Show 视图中,我想添加用于添加评论的表单:
<%= form_for [@issue, @comment] do |f| %>
<div class="field">
<%= f.label :body %><br>
<%= f.text_area :body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
路线:
POST /scripts/:script_id/issues/:issue_id/comments(.:format) comments#create
new_script_issue_comment GET /scripts/:script_id/issues/:issue_id/comments/new(.:format) comments#new
edit_script_issue_comment GET /scripts/:script_id/issues/:issue_id/comments/:id/edit(.:format) comments#edit
script_issue_comment GET /scripts/:script_id/issues/:issue_id/comments/:id(.:format) comments#show
PATCH /scripts/:script_id/issues/:issue_id/comments/:id(.:format) comments#update
PUT /scripts/:script_id/issues/:issue_id/comments/:id(.:format) comments#update
DELETE /scripts/:script_id/issues/:issue_id/comments/:id(.:format) comments#destroy
script_issues GET /scripts/:script_id/issues(.:format) issues#index
这给了我First argument in form cannot contain nil or be empty。
虽然请求信息显示:
{"action"=>"show", "controller"=>"issues", "script_id"=>"10", "id"=>"8"}
我是否必须在 cmets 中也包含 :script_id?
我在这里错过了什么?
【问题讨论】:
-
如果您在
show操作中遇到错误,查看它的控制器代码会很有帮助。 -
我正在尝试在
IssuesShow View 中调用Comments表单。您的意思是来自Issues的显示操作? -
是的,来自问题控制器的
show操作 -
表演动作里面没有东西。我也需要在那里声明吗? (如果这是愚蠢的,请原谅我,我还在学习)
标签: ruby-on-rails ruby ruby-on-rails-4 form-for nested-resources