这可能是一个非常糟糕的措辞问题,但我很好奇的Rails是如何知道的表单数据带给当您单击编辑。 例如,如果我搭建的一个叫后,并在该职位的标题和内容类型的模型,后来当我编辑,表单自动填充。
我看着控制器和形式部分,但它似乎并不像它包含什么,告诉它与现有的数据来填充它。
我问这个的原因是因为我想要让用户“进口”其他人的帖子到其形式和编辑。 我会怎么做呢?
这可能是一个非常糟糕的措辞问题,但我很好奇的Rails是如何知道的表单数据带给当您单击编辑。 例如,如果我搭建的一个叫后,并在该职位的标题和内容类型的模型,后来当我编辑,表单自动填充。
我看着控制器和形式部分,但它似乎并不像它包含什么,告诉它与现有的数据来填充它。
我问这个的原因是因为我想要让用户“进口”其他人的帖子到其形式和编辑。 我会怎么做呢?
要回答你的问题的第一部分,通过查看链接编辑您的模型开始-在索引视图文件( app/views/posts/index.html.erb
),它看起来像:
<%= link_to 'Edit', edit_post_path(post) %>
当您在浏览器中打开索引页,这建立像一个链接:
http://*servername*/post/*id*/edit
资源路由知道这个调用edit
中的作用post_controller
,并且该id
值是在URL中。
现在来看看edit
在你的行动post_controller
( app/controllers/posts_controller.rb
) -它看起来像:
def edit
@post = Post.find(params[:id])
end
这一切都为使用id
值是通过URL传递给找到Post
与数据库id
,并将其保存在变量@post
。 如果您在编辑视图文件(的代码看app/views/posts/edit.html.erb
)它大多只是使用表单部分( /app/views/posts/_form.html.erb
)和文件包含为使您在浏览器中看到的实际表单代码。
<%= form_for(@post) do |f| %>
这条线开始使用建筑形式@post
是得到了在设置变量PostsController
edit
动作。 此代码块里面,你看到的东西一样 -
<div class="field">
<%= f.label :title %>
<%= f.text_field :title %>
</div>
此代码建立在绑在窗体的文本字段:title
的财产@post
-如果在该属性存在一个值,该text_field
方法知道填充文本字段与价值。
第二部分(“我希望让用户‘进口’其他人的帖子到它们的形式和编辑它)是一个很大的开放性和更多地取决于你真正想要在你的应用程序做的事情 - 你可以只允许所有用户看到所有其他用户发布和编辑直接(有点像一个wiki,但破坏性编辑)。 或者你可以做的职位只能由创建它们的用户可编辑的,但可视别人,然后你可以创建一个控制器动作,允许用户向其他用户的帖子内容复制到当前用户拥有一个新的职位。 或其他东西 - 这真的只是取决于你想要什么。
在编辑的情况下,控制器尽快与您要编辑的项目的id的对象。 作为产品的一个实例变量是可用的视图和表格助手 ,即在视图中使用,生成HTML,使该HTML字段是在其内部中所示的值。 Rails的表单辅助魔法我应该说! (当然,如果你写纯HTML则是化繁为简做<input value="<%= @post.title %>
”这是Rails的助手做什么自动为您当您使用f.text_field :title
)
导入其他人的帖子是怎么样,我不知道您的应用程序将如何实现业务逻辑的。 但是,如果用户点击一个编辑链接后,然后在填充他应该看到已经填充的形式存在的价值的看法。