我有一个Rails 2.3.5应用程序,我试图从模型中呈现几个部分(我知道,我知道 - 我不应该).我这样做的原因是我将Comet服务器(APE)集成到我的Rails应用程序中,需要根据Model的事件(例如after_create)推出更新.
我试过这样做:
ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial => "pages/show", :locals => {:page => self})
Run Code Online (Sandbox Code Playgroud)
这允许我渲染不是用户助手的简单部分,但是如果我尝试在我的部分中使用link_to,我会收到一条错误说明:
undefined method `url_for' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
我确保传递给"project_path(project)"的对象不是nil.我也试过包括:
include ActionView::Helpers::UrlHelper
include ActionController::UrlWriter
Run Code Online (Sandbox Code Playgroud)
在包含进行上述"render"调用的方法的Module中.
有谁知道如何解决这个问题?
谢谢
我正在使用EJS从Nodejs服务器渲染和服务HTML页面.我包含的部分部分包含头部引用的脚本和样式表,但这会导致客户端对同一文件发出多个请求(例如,如果父视图也包含该文件)
例如:
<!-- file: parent.ejs -->
<html>
<head>
<link rel="stylesheet" href="public/mystylesheet.css">
<script src="public/myscript.js">
</head>
<body>
<%- partial("partial.ejs") %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在部分:
<!-- file: partial.ejs -->
<html>
<head>
<link rel="stylesheet" href="public/mystylesheet.css">
<script src="public/myscript.js">
</head>
<body>
This is an EJS partial!
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,客户端加载"mystylesheet.css"两次(不必要),"myscript.js"也是如此.
是否有一种简单的方法(最好使用EJS)来确保在部分需要时包含样式表或脚本,但是如果父视图已经包含了资源则不会?
我正在使用AngularJs和模板系统.我想为每个模板添加特定的内联javascript脚本,为选定的选项卡添加警告框(主页|列表|设置)
Html呈现: 但是添加了ng-scope,并且在更改选项卡时没有任何警报.
<script type="text/javascript" class="ng-scope">alert("home")</script>
Run Code Online (Sandbox Code Playgroud)
我在这里提供示例:
或者在这里
带有alert("template1")的plunkr示例存在于template1.html中,但呈现为
<script type="text/javascript" class="ng-scope">alert("template1")</script>
Run Code Online (Sandbox Code Playgroud) 如何轻松找出 Rails 视图部分的使用位置?
在什么视图、控制器等中
当开发别人编写的应用程序时,这很方便。您不一定知道哪些视图正在使用特定的部分,或者在浏览器中导航应用程序时在哪里可以找到使用该部分的位置。
目前,我正在使用 Sublime Text 编辑器在项目范围内搜索部分名称“form”或“_form”,或“render”,但这会产生不必要的无用结果。
我是 Rails 的新手,我正在尝试在循环中渲染部分内容。
这里,books是一个预先加载到控制器中的数组。
books.each do |book|
<%= render 'books/book', :book => book %>
end
Run Code Online (Sandbox Code Playgroud)
这工作正常。但是当books数组真的很大时,视图完全加载需要时间。有没有其他有效的方法可以实现相同的目标?我也尝试了部分收藏(如这里),但即使如此,书籍的加载时间也没有太大区别。任何建议将不胜感激。谢谢。
我正在使用本书学习Ruby on Rails .我从这里开始坚持第二次练习.
我的表单部分app/views/users/_form.html.erb看起来像这样:
<%= form_for(@user, url: yield(:path)) do |f| %>
<%= render 'shared/error_messages', object: @user %>
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
<%= f.submit yield(:button_text), class: "btn btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我的app/views/users/new.html.erb部分注册视图是这样的:
<% provide(:title, 'Sign …Run Code Online (Sandbox Code Playgroud) 我一直在尝试将模板传递给部分,如下所述:https : //handlebarsjs.com/guide/partials.html#partial-blocks。例如,我有一个hello.hbs包含以下内容的文件:
Hello
{{> @partial-block }}
Run Code Online (Sandbox Code Playgroud)
我试图按world.html原样包含在另一个文件中:
{{#> hello }}
World!
{{/hello}}
Run Code Online (Sandbox Code Playgroud)
以便它应该呈现:
Hello
World!
Run Code Online (Sandbox Code Playgroud)
但是如果我这样做,我会收到错误The partial @partial-block could not be found。但是,如果我更改hello.hbs为:
Hello
{{ @partial-block }} <!-- Removed the '>' -->
Run Code Online (Sandbox Code Playgroud)
有用。难道我做错了什么?
先感谢您!
我有一个使用has_many关系的嵌套表单.在我的表单视图中,我使用部分字段输入并传递FormBuilder对象.
form.html.haml:
- form_for @record do |f|
.field
= container do
- f.fields_for :strings do |s|
= render :partial => 'string_fields', :locals => {:s => s}
Run Code Online (Sandbox Code Playgroud)
_string_fields.html.haml:
= s.hidden_field :id
= s.hidden_field :language_id
.field
%h3
= t(:name)
= s.text_field :name, :size => 50
.field
%h3
= t(:description)
= s.text_area :description, :rows => 6
Run Code Online (Sandbox Code Playgroud)
这应该工作; 但是,我想在AJAX中添加功能以使用RJS动态添加另一组字段,当我尝试通过RJS渲染部分时,显然s没有定义(我不知道我通过了什么:locals哈希值).
有没有办法将字段动态地添加到由定义的字段集中fields_for,或者我是否必须重新实现我的部分而不使用帮助程序?
我正在使用RSpec(Rails 3.2.8上的2.12)测试视图.我正在使用CanCan有条件地在页面上显示某些元素.这需要一个控制器方法'current_user'.在我的一些规范中,我已经能够存根current_user,例如.controller.stub(:current_user).and_return(etc)或view.stub.etc.
这适用于我的一些规格.但我有一对夫妇在哪里工作,我不明白为什么.
它不工作的两个规范测试一个视图,它调用一个部分,在部分内部我访问'current_user'作为一个方法.错误是
undefined local variable or method `current_user'
Run Code Online (Sandbox Code Playgroud)
所以我想我的问题是如何正确地存根方法,以便可以在局部内部访问它们.
应该怎么做?
我在这里有一个ActionMailer视图中的局部问题.他们只是不工作 - 我不知道,如果我做错了,这是一个错误或根本不支持.
这应该是有效的,因为需要在邮件程序视图中也有DRY代码(从我的测试中,我看到,帮助程序正在工作(在将它们包含到ActionMailer类之后)
我正在使用:Ruby 2.0.0-p247上的Rails 4.0.0
错误信息:
ActionView::MissingTemplate at /events/81/user_invitations
==========================================================
> Missing partial user_invitation_mailer/test_partial with {:locale=>[:en], :formats=>[:text], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}. Searched in:
* "/Users/user/Sites/participate/app/views"
* "/Users/user/.rvm/gems/ruby-2.0.0-p247/gems/devise-3.4.0/app/views"
Run Code Online (Sandbox Code Playgroud)
但这部分就在那里! - 我不允许上传图片...结构是:
- views
-- user_invitation_mailer
--- _test_partial.html.erb
--- user_invitation.text.erb
Run Code Online (Sandbox Code Playgroud)
细节:
呼叫控制器:
UserInvitationMailer.user_invitation(@invitation).deliver
Run Code Online (Sandbox Code Playgroud)
UserInvitationMailer:
class UserInvitationMailer < ActionMailer::Base
add_template_helper(MailerHelper) # for testing including helpers.
def user_invitation(invitation)
@invitation = invitation
mail(to: @invitation.email, subject: 'Invitation')
end
end
Run Code Online (Sandbox Code Playgroud)
user_invitation.text.erb:
Hi <%= @invitation.email %>,
This is a test email see:
<%# test_helper %> …Run Code Online (Sandbox Code Playgroud)