Nda*_*ior 3 ruby model-view-controller ruby-on-rails form-for
这不是一个真正的故障排除问题,而是一个解释请求.我很难理解form_for方法的工作原理.有人可以向我解释这种方法在这种情况下的作用.这是我在博客应用程序上为评论功能创建表单的代码.我的代码有效,所以我只想了解它的工作原理和工作原理.谢谢!!
这是我的新评论表:
<%= form_for([@post, @post.comments.build]) do |c| %>
<p>
<%= c.label :content, class: "col-md control-label" %><br>
<%= c.text_area :content, rows: "10", class: "form-control" %>
</p>
<p>
<%= c.submit %>
</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是我的评论代码控制器:
class CommentsController < ApplicationController
def new
@post = Post.find(params[:post_id])
end
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
@comment.user_id = current_user.id
@comment.save
#redirect_to post_path(@post)
redirect_to posts_path
end
private
def comment_params
params.require(:comment).permit(:content)
end
end
Run Code Online (Sandbox Code Playgroud)
特别是,form_for的"[@ post,@ post.comments.build]"参数是做什么的?
首先,没有什么可以做form_for你不能做的form_tag(和一些额外的打字).
是什么form_for让你做的是轻松创建与轨道公约适应的URL和参数命名的项形式.
第一个参数form_for是正在编辑或创建的资源.最简单的可能就是这样@post.数组表单用于命名空间或嵌套资源.
您的示例[@post, @post.comments.build]意味着这是一个新注释的表单(数组的最后一个元素是未保存的Comment实例),它嵌套在该特定帖子下.这将导致表单执行POST请求/posts/1234/comments(假设帖子的id为1234).需要存在相应的嵌套路由才能使其生效.
第二件事form_for是允许你编写c.text_area :content并让它自动使用正确的参数名称(注释[content])并使用预先填充注释content属性的当前值.
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |