标签: actionview

为丢失的模板提供404而不是500错误

我有一个Rails 3.0应用程序(工作在3.2升级),每当有人请求一个不存在的模板时,它会在生产中产生500错误.例如,mysite.com/blog_posts/532将ID为532的帖子作为HTML发送回来没有问题,但如果由于某种原因请求mysite.com/blog_posts/532.txt,该应用程序会引发500 ActionView :: MissingTemplate错误.

这不应该发生,因为模板首先不应该存在.它应该更恰当地是404错误,或者只是显示HTML模板.

如何让应用程序显示所有缺失模板错误的404错误,或显示默认的HTML模板而不是500?

日志:

Started GET "/blog_posts/73.txt" for 127.0.0.1 at 2013-05-20 21:22:51 -0400
  Processing by BlogPostsController#show as TEXT
  Parameters: {"id"=>"73"}
  PK and serial sequence (2.0ms)   SELECT attr.attname, seq.relname
 FROM pg_class seq,
 pg_attribute attr,
 pg_depend dep,
 pg_namespace name,
 pg_constraint cons
 WHERE seq.oid = dep.objid
 AND seq.relkind = 'S'
 AND attr.attrelid = dep.refobjid
 AND attr.attnum = dep.refobjsubid
 AND attr.attrelid = cons.conrelid
 AND attr.attnum = cons.conkey[1]
 AND cons.contype = 'p'
 AND dep.refobjid = '"blog_posts_blog_tags"'::regclass
  PK and custom sequence (1.0ms) …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionview

4
推荐指数
1
解决办法
1823
查看次数

Rails:将局部变量从控制器传递到视图

我试图将局部变量从控制器传递到视图:

# pages_controller.rb
def my_method
  render template: "pages/new_page", message: @message
end

# new_page.html.erb
<% if message %>
  Do something
<% else %>
  Do something else
<% end %>
Run Code Online (Sandbox Code Playgroud)

但这给了我未定义的局部变量或方法message错误,而在部分情况下这可以正常工作。

我知道这可以这样解决:

def my_method
  render template: "pages/new_page", locals: { message: @message }
end
Run Code Online (Sandbox Code Playgroud)

我只是想知道,在没有当地人的情况下,这是如何工作的。

ruby-on-rails local-variables actionview partials actioncontroller

4
推荐指数
1
解决办法
4521
查看次数

ArgumentError:升级 Rails 6.1.3 时出现错误数量错误

在 mimemagic 惨败之后,我最近将 Rails 6.0.3.5 应用程序升级到了 6.1.3。

现在,我看到渲染视图后发生的这个有趣的问题,这很奇怪。我该如何调试这个?该应用程序使用 Ruby 2.7.1

这是完整的堆栈跟踪

[31a95c67-7597-4856-9dfc-e813bb0d760a]   Rendered layout layouts/application.html.erb (Duration: 5001.5ms | Allocations: 119937)
[31a95c67-7597-4856-9dfc-e813bb0d760a] Completed 200 OK in 5572ms (Views: 5005.9ms | ActiveRecord: 23.5ms | Allocations: 196152)
[31a95c67-7597-4856-9dfc-e813bb0d760a]
ArgumentError: wrong number of arguments (given 2, expected 3)
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/actionview-6.1.3.1/lib/action_view/base.rb:230:in `initialize'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/web-console-3.7.0/lib/web_console/template.rb:21:in `new'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/web-console-3.7.0/lib/web_console/template.rb:21:in `render'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/web-console-3.7.0/lib/web_console/middleware.rb:37:in `block in call'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/web-console-3.7.0/lib/web_console/middleware.rb:20:in `catch'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/web-console-3.7.0/lib/web_console/middleware.rb:20:in `call'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/actionpack-6.1.3.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/railties-6.1.3.1/lib/rails/rack/logger.rb:37:in `call_app'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/railties-6.1.3.1/lib/rails/rack/logger.rb:26:in `block in call'
    from /Users/aurs/.rvm/gems/ruby-2.7.1/gems/activesupport-6.1.3.1/lib/active_support/tagged_logging.rb:99:in `block in tagged' …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails actionview ruby-on-rails-6.1

4
推荐指数
1
解决办法
3259
查看次数

试图扩展ActionView :: Helpers :: FormBuilder

我试图通过将一些逻辑移入FormBuilder来干掉一些代码.在阅读有关如何选择和替代表单构建器的文档后,对我来说逻辑解决方案似乎是这样的.

在视图中

<% form_for @event, :builder => TestFormBuilder do |f| %>
    <%= f.test  %>
    <%= f.submit 'Update' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后在app/helpers/application_helper.rb中

module ApplicationHelper
    class TestFormBuilder < ActionView::Helpers::FormBuilder
        def test
            puts 'apa'
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

但是,这在"form_for"中给出了一个错误

  uninitialized constant ActionView::Base::CompiledTemplates::TestFormBuilder
Run Code Online (Sandbox Code Playgroud)

我在哪里做错了?

ruby-on-rails actionview formbuilder

3
推荐指数
1
解决办法
4201
查看次数

重复使用form_for伪造邮件错误

我在模板new.html.erb中有一个form_for,我正常保存到数据库,然后成功发送电子邮件.我希望邮件程序发送相同的new.html.erb作为正文并传递模型,以便完全填充表单.我收到以下错误:

undefined method `protect_against_forgery?' for #<#<Class:0x000000049d7110>:0x000000049d4690>
Run Code Online (Sandbox Code Playgroud)

在form_for标记之后的行上(因为它注入了我认为的auth令牌标记).有没有办法可以规避这一点,以便我可以在邮件中重复使用该模板?

这是邮件代码的样子

class MaintenanceMailer < ActionMailer::Base
  helper :application  

  def request_email(maintenance)
    mail :to => maintenance.community.email, :subject => "Maintenance" do |format|
      format.html { render :layout => 'default', :template => 'maintenance/new' }
    end    
  end
end  
Run Code Online (Sandbox Code Playgroud)

actionmailer actionview form-helpers ruby-on-rails-3

3
推荐指数
1
解决办法
2304
查看次数

最新的Rails 3:ActionView :: Template :: Error(无法在105行第13列解析YAML)

我最近遇到了一个奇怪的问题或Rails 3,可能自从新的rubygems 1.5更新.基本上当我使用乘客3.0.2将程序部署到nginx时,我立即有500个页面,并且在我的生产日志中有类似的问题:


ActionView::Template::Error (couldn't parse YAML at line 105 column 13):
    10: </div>
    11: <% end %>
    12: <div class="field">
    13:     <%= f.label :name %> <%= f.text_field :name %>
    14: </div>
    15: <div class="field">
    16:     <%= f.label :password %> <%= f.password_field :password %>
  app/views/sessions/new.html.erb:13:in `block in _app_views_sessions_new_html_erb___4159562374589718885_19217640_4456777064017176818'
  app/views/sessions/new.html.erb:5:in `_app_views_sessions_new_html_erb___4159562374589718885_19217640_4456777064017176818'

Run Code Online (Sandbox Code Playgroud)

看起来它在环境中缺少某些内容,因此它无法识别我的所有form_for元素.基本上该页面只是一个简单的登录页面,包含2个字段 - 名称和密码.对于具有表单的其他页面,也会出现此问题,但仅限于生产环境中.在开发环境中,它完全正常工作.我已将所有宝石升级到最新版本,包括rails 3.0.4,但这看起来与此问题并不完全相关.我也经常在我的VMware BEFORE gem 1.5上将相同的东西部署到ubuntu上,现在一切都还不错,但新部署没有回头路.

我已经将它部署到运行最新ubuntu的2台机器上,并且两台机器都有这样的错误.Nginx和乘客按标准步骤安装.显然,有了这个问题,该网站永远无法运行.任何人都可以为此提供任何错误修复?非常感谢,如果可以的话!

PS:我写的登录页面基本上来自这里:http: //railstutorial.org/chapters/sign-in-sign-out#top

yaml actionview form-for ruby-on-rails-3

3
推荐指数
1
解决办法
2197
查看次数

Rails - 如何获取控制器中单个图像资源的URL?

我试过包括ActionView::Helpers::AssetTagHelper然后使用这个image_path()方法然而它让我感到悲伤:

undefined local variable or method `config' for ActionView::Helpers::AssetTagHelper:Module
Run Code Online (Sandbox Code Playgroud)

我可能还有一些简单的东西.有任何想法吗?

url controller actionview actionviewhelper ruby-on-rails-3

3
推荐指数
1
解决办法
3461
查看次数

在保留html实体的同时在Rails中使用html_safe?

假设我正在输出一个帖子标题,在我们的数据库中,它是Hello Y&#8217;all- 我可以不使用输出它.html_safe,但是这样的方式它不能在html中输出Hello Y&amp;#8217;all吗?

也就是说,如果用户从使用印刷正确的撇号的文字处理器复制帖子标题,我会得到乱码输出,因为它&在数据库中逃脱了&amp;.当然,我想要Bonnie & Clyde输出数据库中的标题,Bonnie &amp; Clyde因为这是正确的HTML ...

有安全的方法吗?

ruby-on-rails actionview html-entities

3
推荐指数
1
解决办法
1935
查看次数

rails 4.1 beta升级'action-view no method error'

我正在尝试将rails应用程序从rails 4.0.2升级到4.1 beta,我按照http://edgeguides.rubyonrails.org/4_1_release_notes.html#action-pack-removals上给出的所有说明进行操作.每当我运行我的应用程序时,这就是我得到的错误

/Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/railtie/configuration.rb:95:in `method_missing': undefined method `action_view' for # (NoMethodError)
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/jquery-rails-3.0.4/lib/jquery/rails/railtie.rb:7:in `block in '
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:36:in `call'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:45:in `block in run_load_hooks'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:44:in `each'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-4.1.0.beta1/lib/active_support/lazy_load_hooks.rb:44:in `run_load_hooks'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/application.rb:121:in `initialize'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/railtie.rb:171:in `new'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/railtie.rb:171:in `instance'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/application.rb:90:in `inherited'
    from /Users/surendra/Desktop/faces/config/application.rb:13:in `'
    from /Users/surendra/Desktop/faces/config/application.rb:12:in `'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/commands/commands_tasks.rb:79:in `require'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/commands/commands_tasks.rb:79:in `block in server'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/commands/commands_tasks.rb:76:in `tap'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/commands/commands_tasks.rb:76:in `server'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from /Users/surendra/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.1.0.beta1/lib/rails/commands.rb:17:in `'
    from bin/rails:4:in `require'
    from bin/rails:4:in `'

我的application.rb文件就是这个 …

ruby-on-rails upgrade actionview

3
推荐指数
1
解决办法
686
查看次数

如何从控制器外部访问Rails控制器视图上下文?

我正在通过创建一个"普通的旧Ruby"presenter对象来清理一些依赖于某些自定义控制器辅助方法的代码.在我的控制器中,我能够将视图上下文传递给类:

def show
  # old code: view_context.bad_helper_method
  @foobar = FoobarPresenter.new(Foobar.find(params[:id]), view_context)
end

class FoobarPresenter
  def initialize(model, view_context)
    @model = model
    @view_context = view_context
  end

  def something
    @view_context.bad_helper_method
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,我不确定在我的测试中应该通过什么.我宁愿动态地拉动helper/view_context,这样我就不必将其传入.

如何访问控制器外部的视图/控制器助手上下文?

这是一个Rails 3.2项目.

ruby-on-rails actionview actioncontroller actionviewhelper

3
推荐指数
2
解决办法
9371
查看次数