可能重复:
rails中的 - %>和%>之间的差异
那么对于ERB文件,<% - ... - %>与<%...%>之间的区别是什么?据我所知,它们的用途相同,但其中一个需要更多的输入.
在index.html.erb里面有以下代码
<video width="320" height="240" controls="controls">
<source src="truffle1.mp4"/>
Your browser does not support the video tag.
</video>
Run Code Online (Sandbox Code Playgroud)
我不知道在哪里放我的mp4视频文件所以我把它放在几个地方.
接下来,我启动rails服务器并使用Chrome打开索引页面.我看到黑色视频帧,但它没有播放.当我尝试在新窗口中打开视频时 我得到无路由匹配[GET]"/admin/truffle1.mp4"(注意admin只是控制器的命名空间).
好像这是一个rails路由问题......
我目前正在教自己一些RoR和教程,但添加一些更好的布局和引导程序的东西,我遇到了一个我无法弄清楚的问题.
我正在尝试进行验证部分(http://guides.rubyonrails.org/getting_started.html#adding-some-validation),但是当我使用时:
<% @post.errors.any? %>
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
undefined method `errors' for nil:NilClass
Extracted source (around line #9):
<legend><h1>Add Post</h1></legend>
<%= form_for :post, url: posts_path, html: {class: 'form-horizontal'} do |f| %>
<% if @post.errors.any? %>
<div id="errorExplanation">
Run Code Online (Sandbox Code Playgroud)
什么都行不通,我甚至复制并粘贴了教程中的部分.
以下是视图的代码:
<p> </p>
<div class="span6"
<fieldset>
<legend><h1>Add Post</h1></legend>
<%= form_for :post, url: posts_path, html: {class: 'form-horizontal'} do |f| %>
<% if @post.errors.any? %>
<div id="errorExplanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= …Run Code Online (Sandbox Code Playgroud) 当谈到<% %>(评估Ruby代码),<% -%>(评估Ruby代码,抑制尾随换行符)和<%- -%>(评估Ruby代码,抑制尾随换行符和前导空格)时,在Rails中推荐使用ERb是什么?似乎<%- -%>会使输出HTML看起来最好,但<% %>似乎主要是我看到的.
我在Javascript ERB文件中有以下代码:
$(document).ready(function() {
$("#workout-week").append(
<%= escape_javascript(render :partial => "show_training_period", :locals => { :period => @period }) %>
);
});
Run Code Online (Sandbox Code Playgroud)
当我到达视图时,我收到以下错误:
undefined method `render' for #<#<Class:0x00000004e21158>:0x00000005dbfe98>
Run Code Online (Sandbox Code Playgroud)
部分存在,局部变量是非零的.知道为什么会这样吗?
堆栈跟踪:
app/assets/javascripts/slider.js.erb:2:in `evaluate_source'
tilt (1.3.3) lib/tilt/template.rb:209:in `instance_eval'
tilt (1.3.3) lib/tilt/template.rb:209:in `evaluate_source'
tilt (1.3.3) lib/tilt/template.rb:144:in `cached_evaluate'
tilt (1.3.3) lib/tilt/template.rb:127:in `evaluate'
tilt (1.3.3) lib/tilt/template.rb:76:in `render'
sprockets (2.0.3) lib/sprockets/context.rb:175:in `block in evaluate'
sprockets (2.0.3) lib/sprockets/context.rb:172:in `each'
sprockets (2.0.3) lib/sprockets/context.rb:172:in `evaluate'
sprockets (2.0.3) lib/sprockets/bundled_asset.rb:171:in `build_dependency_context_and_body'
sprockets (2.0.3) lib/sprockets/bundled_asset.rb:135:in `dependency_context'
sprockets (2.0.3) lib/sprockets/bundled_asset.rb:194:in `build_dependencies_paths_and_assets'
sprockets (2.0.3) lib/sprockets/bundled_asset.rb:141:in `dependency_paths' …Run Code Online (Sandbox Code Playgroud) 在木偶模板中检查变量是否为undef的正确方法是什么?
在清单中,变量定义如下
$myvar = undef
Run Code Online (Sandbox Code Playgroud)
如何在模板中检查?
是看到以下两个变种
<% if @myvar -%>
<% end -%>
Run Code Online (Sandbox Code Playgroud)
和
<% if not @myvar.nil? and @myvar -%>
<% end -%>
Run Code Online (Sandbox Code Playgroud)
它们似乎都适用于我的情况,但我想知道第一种方法在某些情况下是否失败?
在内容模型上有一个名为的属性slug.在创建新记录时,我想使用帮助程序来填充此字段,但在现有记录上,我想使用数据库中的值.
目前我有:
<% if @content.new_record? %>
<%= f.text_field :slug, :value => "#{generate_slug(6)}" %>
<% else %>
<%= f.text_field :slug %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但这似乎有点冗长.这是最好的方式,还是别的办法?(Rails newb只是试图在我不确定的问题上找到"Rails方式")
编辑
我应该注意,帮助程序当前位于/app/helpers/application_helper.rb中已移至内容控制器中的私有操作.大卫的回答很有效.
因此,我希望避免使用ERB处理JavaScript文件,这样我就可以获得适当的资产路径,例如图像.
目前,这似乎是流行的方法:
var myImage = "<%= asset_path('my_image') %>";
当然,这需要将文件名更改为"*.erb",以便进行处理.
我更倾向于将ERB丑陋与我项目中的一个点隔离,制作一个清单文件(例如"assets.js.erb")来计算并提供我需要的所有资产路径.
我当然可以通过逐案解决来做到这一点:
ASSETS =
"my_image": "<%= asset_path('my_image') %>"
window.assetPath = (path) -> ASSETS[path]
Run Code Online (Sandbox Code Playgroud)
但是,我真的宁愿只写一些ERB来递归我的所有内容asset_paths.asset_environment.paths并为我构建一个大的对象文字清单,这样我真正的应用程序JavaScript就可以自信地调用:
var myImage = assetPath('my_image');
关于(1)的任何想法是否有更容易的方法来做我错过的,或者(2)我如何完成对所有潜在有效参数的搜索asset_path?
我有一个需要将视图呈现为字符串的操作.该视图称为index.xml.erb.我试图用render_to_string来实现这个目的:
my_string = render_to_string(layout: false, format: "xml")
Run Code Online (Sandbox Code Playgroud)
render_to_string是渲染index.html.erb的内容并将其分配给my_string.我错过了什么?
注意:我知道我可以这样做:
my_string = render_to_string(:action => "#{self.action_name}.xml.erb")
Run Code Online (Sandbox Code Playgroud)
但我很好奇为什么"格式"选项不适用于render_to_string.
ruby-on-rails erb actionview actioncontroller ruby-on-rails-3
我正在使用(主要)部分:
<%= render partial: 'shared/page/head' %>
Run Code Online (Sandbox Code Playgroud)
哪个使用其他(次要)部分:
<head>
<%= render partial: 'shared/page/head/title' %>
<%= render partial: 'shared/page/head/meta' %>
...
<%= render partial: 'shared/page/head/fonts' %>
...
<%= render partial: 'shared/page/head/google_analytics' %>
</head>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用相app/view对于这些辅助部分的路径,即使它们与主要部分位于同一目录中.
我尝试过使用相对路径:
<%= render partial: 'title' %>
Run Code Online (Sandbox Code Playgroud)
要么
<%= render partial: './title' %>
Run Code Online (Sandbox Code Playgroud)
但是没有工作.
有没有办法让它使用相对路径部分解决部分问题?