我有一个关于 Ruby on Rails、ActionView、Application.html.erb 和 HTML head 标签的使用的简单问题。
我知道 application.html.erb 用于在您网站上的所有页面上显示内容。
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="My desciprtion.">
<meta name="robots" content="index,follow">
<title><%= @title %></title>
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true, :cache => "cache/all" %>
<%= javascript_include_tag "application", :async => true, "data-turbolinks-track" => true, :cache => "cache/all" %>
<%= csrf_meta_tags %>
</head>
Run Code Online (Sandbox Code Playgroud)
这意味着,上面的代码会显示在我的所有网页上。
现在,我一直在阅读有关 SEO 的内容,它建议为每个网页使用单独的描述元标记,以告诉搜索引擎页面的内容。我要问你的问题是
您是否可以在 Rails 中自定义各个页面,例如
page1.html.erb
page2.html.erb
page3.html.erb
Run Code Online (Sandbox Code Playgroud)
并在其中包含 HTML head 标签?
我使用 Ruby on Rails 已经有一段时间了,但我从未在视图页面中看到过 head 标签。
我还没有看到关于此事的身体标签。
我用过
<% @title …Run Code Online (Sandbox Code Playgroud) 我有一个一直有效的 Rails 4 应用程序,但现在一个带有 simple_form_for 的页面产生了错误。我删除了所有代码,只留下 simple_form_for ,但仍然出现错误。
有错误的页面 (_form.html.erb):
<%= simple_form_for @anuncio do |f| %>
<%= f.input :titulo %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
当我执行此页面时,出现此错误:
F, [2015-01-08T16:16:21.920151 #19971] FATAL -- :
ActionView::Template::Error (wrong number of arguments (3 for 2)):
1: <%= simple_form_for @anuncio do |f| %>
2: <%= f.input :titulo %>
3: <% end %>
config/initializers/simple_form.rb:100:in `block (2 levels) in <top (required)>'
app/views/anuncios/_form.html.erb:2:in `block in _app_views_anuncios__form_html_erb___4151327912554241759_53270140'
app/views/anuncios/_form.html.erb:1:in `_app_views_anuncios__form_html_erb___4151327912554241759_53270140'
app/views/anuncios/new.html.erb:3:in `_app_views_anuncios_new_html_erb___954346116733613916_53199500'
Run Code Online (Sandbox Code Playgroud) 我显然无法在这里得到正确的语法:
<table width="100%" border="0" cellspacing="0" cellpadding="20" background="<%= #{Rails.root}/app/assets/images/image.png %>">
Run Code Online (Sandbox Code Playgroud)
这样做的恰当方法是什么?
假设我有变量@var.通常我会用<%= @var %>它写入视图.现在我想从我的视图中调用一个模块方法,该方法在内部决定写入@var或不写入内容.
我无法使用模块内部<%= %>.如何打印@var模块内的内容?该方法将被调用如下:<% my_method %>.谢谢
更新 感谢您的答案到目前为止.也许我应该更清楚地说明我的初始问题.对不起,如果我不够清楚.
起初我使用了<%= %>这样的标签:
def print_if_present(var)
var ? var : ""
end
<%= print_if_present var %>
Run Code Online (Sandbox Code Playgroud)
但是,当它var为零时,我得到了""作为输出,在视图中占据了空间.我该如何防止这种行为?
我有一个活跃的模型模型,我想使用form_for.
form_for(@item, url: (params[:action] == 'edit' ? api_item_path(datasheet_id: params[:datasheet_id], item_id: params[:item_id]) : api_items_path), html: {method: (params[:action] == 'edit' ? 'patch' : 'post')}) do |f|
Run Code Online (Sandbox Code Playgroud)
我这样选择url因为命名路径前面有'api_'.(这可能是一个很好的方法,但我希望这不是我的问题的一部分).
问题是带有方法键的html选项不会影响表单的方法(总是'post').
模型respond_to?:persisted?,因此ActionView正确命名表单(id ="edit_item_xxx",class ="edit_item"),但尽管该方法仍然存在.
我希望有一些明显的东西让我失踪.
以下是我用于获取信息的来源:https : //github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/form_helper.rb http://guides.rubyonrails.org/form_helpers html的
我正在计算字符串长度,如下所示:
if(key['name'].to_s.chars.length==0)
key['name']="Others"
end
Run Code Online (Sandbox Code Playgroud)
并且在ruby 2.1.8p440上它可以工作,但在ruby 1.9.3p551上它会抛出以下错误:
(undefined method `length' for #<Enumerator: "Latency":chars>):
Run Code Online (Sandbox Code Playgroud)
我无法更新1.9.3我必须更改此代码.