Rails render partial 和 form_for那些事

rails render partial 参数


<%= render :partial => 'account' %> 与 <%= render 'account' %>

1.render 输出父模板的内容,将渲染的内容,嵌入父模板。|
2.renderPartial 则不输出父模板的内容。只对本次渲染的局部内容,进行输出
其作用就是渲染指定页面,如<%= render 'account' %>就是渲染当前目录下的 _account.html.erb文件
也可以渲染其它目录下的页面,用<%= render :partial => 'xx目录/yy目录/account' %>

  • 传参
  1. 对于<%= render :partial => "account", :locals => { :account => @buyer } %>
    在_account.html.erb就可以直接访问 account 变量,不需要params[:account]。
  2. 如果不用:partial,就得把locals去掉,改为 <%= render 'account', :account => @buyer %>
    更简单的方法:
    <%= render :partial => "account", :object => @buyer %>
    使用object方法很简单,就是把一个变量原名传递到partial里,传递@buyer到_account.erb的partial里变量名还是@buyer
    参考链接

表单辅助方法


form_tag 辅助方法接受两个参数:提交表单的地址和选项散列。选项散列用于指明提交表单的方法,以及 HTML 选项,例如表单的 class 属性。

form_tag(controller: "people", action: "search", method: "get", class: "nifty_form")
# => '
'

在上面的代码中,method 和 class 选项的值会被添加到生成的 URL 地址的查询字符串中,不管我们是不是想要使用两个散列作为参数,Rails 都会把这些选项当作一个散列,即选项散列。
为了告诉 Rails 我们想要使用两个散列作为参数,我们可以把第一个散列放在大括号中,或者把两个散列都放在大括号中。这样就可以生成我们想要的 HTML 了:

form_tag({controller: "people", action: "search"}, method: "get", class: "nifty_form")
# => ''

参考链接

关于form_for


不像form_tag那样指定action链接跳转,而是通过实例跳转。

<%= form_for @person do |f| %>
  <%= f.label :first_name %>:
  <%= f.text_field :first_name %>
<%= f.label :last_name %>: <%= f.text_field :last_name %>
<%= f.submit %> <% end %>

上述内容即为:


  
  :
  
:

那么问题来了,那rails是怎么知道是要form_for提交是要跳转到编辑edit还是新增new呢?
我个人理解是:rails根据你跳到form_for页面之前是编辑还是新增来判断的,比如你点就编辑,链接跳转到了form_for这页面,那你在form_for编辑后的内容就是对应链接到编辑那去。而上面例子里是“new_person",说明是从新增那点击跳转过来的。
参考链接

你可能感兴趣的:(Rails render partial 和 form_for那些事)