# views相关

# 概念

ERb: Embedded Ruby (嵌入式 Ruby)

# 使用模板

如果这个 partial 不属于特定的 controller,一般的惯例是放到 shared 目录下。

# 由各页面提供的内容
<%= yield %>

# 用于生成 以控制器和动作命名的名称
<%= params[:controller] + '-' + params[:action] %>

# View 中
<% provide(:title, 'Home') %>

# Layout 中
<title>Ruby on Rails | <%= yield(:title) %></title>

# 为 provide 提供默认值
< title> < %= content_for?(:title) ? content_for(:title) : 'This is a default title' %> < /title>

# 防止跨站请求伪造
<%= csrf_meta_tags %>

# Tips

  • 取得数据的三种方式:
f[:id]
f.id
f["id"]

<%和<%=不太一樣,前者只執行不輸出,像用來迭代的each和end這兩行就不需要輸出。而後者<%= 裡的結果會輸出給瀏覽器。

# helper

Rails 内置了很多视图方法,也可以自己创建,成为 helper

# app/helpers/application_helper.rb
module ApplicationHelper  # module 为我们提供了一种把相关方法组织到一起的方式,

  def full_title(page_title)
      base_title = "Ruby on Rails Tutorial Sample App"
      if page_title.empty?
        base_title
      else
        "#{base_title} | #{page_title}"
      end
  end
end
  • tags
# link_to 第一个参数是链接文本,链接地址,[Hash可选]
<%= link_to "sample app", '#', id: "logo" %>

# image_tag 第一个参数为地址,第二可选为 Hash。使用帮助方法,会通过 Asset Pipeline
# 自动在 app/assets/images/ 中寻找
<%= link_to image_tag("rails.png", alt: "Rails"), 'http://rubyonrails.org/' %>
<ul class="nav">
  <li class="<%= 'active' if params[:controller] == 'controller1' %>"> <a href="/link">Link</a> </li>
  <li class="<%= 'active' if params[:controller] == 'controller2' %>"> <a href="/link">Link</a> </li>
  <li class="<%= 'active' if params[:controller] == 'controller3' %>"> <a href="/link">Link</a> </li>        
</ul>

# 常用 view_helper

  • button_to
:disable_with => "Submitting...."
  • link_to
  <%= link_to 'Hello', welcome_say_hellow_path %>
  • img_path
# 获取文件经过 rails 解析后 url 地址
<%= asset_path("rails.png") %>
  • 返回按钮
<%= link_to_function "返回上一页", "history.go(-1)" %>

# Simple_fome_for

调用 form_for 方法时,要指定一个对象。在上面的表单中,指定的是 :article。这个对象告诉 form_for,这个表单是用来处理哪个资源的

<%= form_for :romantic_order, url:webapp_romantic_order_path(current_user.id), :html => {id: "cancle"}, method: :patch do |f| %>
    ……
<% end %>

# <!--支付订单-->
<%= simple_form_for :set_menu, method: :post, remote: true,
                    url: webapp_romantic_order_pay_path(params[:id])  do |f| %>
    <%= f.input :to_pay, as: :hidden, input_html: {name: "to_pay", value: true} %>
    <button type="submit" style="display:none" id= "btn_pay"></button>
<% end %>

<%= f.date_field :birthday, :value => Time.now.strftime('%Y-%m-%d') %>

# 页面判断技巧

# 三元运算符
<% f.image.blank?  ? img_url = "order_active.png" : img_url = f.image  %>
Last Updated: 5/14/2022, 11:38:45 AM