标签: actionview

在不存在的方法上使用 Rails 表单助手

通常,在 Rails 中使用表单助手时,每个字段都直接与相应对象上的方法相关联。

但是,我有一个表单(用户注册)需要包含不属于用户模型本身(例如,卡片详细信息)但需要出现的字段。

我如何构建表单以便我可以获得必要的字段,并根据需要验证它们(以便它适合我的所有其他验证)而不会弄脏我的用户模型?

ruby ruby-on-rails actionview helpers

5
推荐指数
1
解决办法
859
查看次数

从Rails模型渲染部分时访问URL助手

我必须渲染一些模板并将HTML块发送到SendGrid以进行电子邮件替换.所以,不幸的是,我在模型中进行了一些渲染,如下所示:

    view = ActionView::Base.new(Rails.configuration.paths["app/views"].first)
    view.render(:partial => template_name)
Run Code Online (Sandbox Code Playgroud)

即使我添加:

    view.extend Rails.application.routes.url_helpers
    view.extend ActionView::Helpers::UrlHelper
    view.extend ApplicationHelper
Run Code Online (Sandbox Code Playgroud)

除非我明确定义模块,否则部分无法访问URL助手,例如url_for:

    Rails.application.routes.url_helpers.edit_user_url(user, :host => Rails.application.config.action_mailer.default_url_options[:host])
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方法在模型调用的模板中使用URL Helper?

ruby-on-rails actionmailer actionview actionviewhelper

5
推荐指数
1
解决办法
891
查看次数

请求格式时,Rails 4 中缺少模板错误 */*;

我已经看到这些错误很长时间了,但没有发现问题:

ActionView::MissingTemplate: Missing template pages/home, application/home with {:locale=>[:en], :formats=>["*/*;"]}

用户代理始终是 MSIE6(这是我之前放弃的部分原因)。

重现: curl -H "Accept: */*;" -I http://localhost:5000

有谁知道怎么修?

编辑

curl -H "Accept: */*" -I http://localhost:5000作品。仅当格式设置为*/*;(注意分号)时,它才起作用。

更新

我试图修改Mime:ALL的建议的意见,但无法拥有它同时接受*/*,并*/*;在同一时间。我看到的一个解决方案是在不存在或格式错误的 mime 类型时修补请求的处理方式,但我不确定如何处理。这个答案提供了一个线索,但我仍然没有。

更多更新

我仍然看到这些错误和更多。一个新的是:formats=>["hc/url;*/*"](Firefox)。我很惊讶这不会影响其他任何人,我认为我的代码中没有任何会导致不常见错误的特定内容。

format internet-explorer ruby-on-rails actionview

5
推荐指数
1
解决办法
1030
查看次数

为什么submit_tag会生成带有name="commit"属性的HTML?

根据rails文档,使用submit_tag助手将生成类似的内容

\n\n
submit_tag\n# => <input name="commit" type="submit" value="Save changes" />\n
Run Code Online (Sandbox Code Playgroud)\n\n

它包括财产name="commit"

\n\n
    \n
  • 为什么这会被包括在内?它是某种标准吗?尝试理解“提交”在这种情况下的含义

  • \n
  • 我注意到点击提交后它被包含在params控制器内部。这是最近改变的吗?我认为只包含 url 参数和 POST/PUT 数据?

    \n\n

    @参数

    \n\n

    => {“utf8”=>“\xe2\x9c\x93”,“authenticity_token”=>“4q3u+mfMi57YbchTAzaCI7WHmzfZJrLbTZ17aVwfq9uw8aMU1B3PBR13qfipgN6lbRoi0dywFU9i1AbJ0GP7UA==”,“电子邮件”=>“foo@example.co”, “密码”=>“(已编辑)", "dest"=>"", "commit"=>"登录", "controller"=>"sessions", "action"=>"log_in"}

  • \n
\n\n

谢谢!

\n

forms ruby-on-rails actionview

5
推荐指数
1
解决办法
684
查看次数

弃用警告:ActionView::Base 实例应该使用查找上下文、赋值和控制器构建

我将应用程序从 rails 5.2 迁移到 rails 6。只剩下一件事要做,但我不知道如何做。

我有这个折旧警告:

弃用警告:ActionView::Base 实例应该使用查找上下文、赋值和控制器来构造。(从 /Users/xxx/xxxx/app/models/stock.rb:42 处的 new 调用)

从这个代码:

view = ActionView::Base.with_empty_template_cache.new(
         ActionController::Base.view_paths, 
         categories: categories, 
         periods: periods
       )

result = view.render formats: [:xlsx], 
                     handlers: [:axlsx], 
                     template: 'admin/reports/logistics/stocks_by_age'
Run Code Online (Sandbox Code Playgroud)

我不明白如何解决它。我去查看源代码中的折旧,但它没有帮助我弄清楚我应该做什么,而且我没有真正找到任何有关此“查找”的文档。

请问有人可以帮我理解这种折旧吗?

ruby-on-rails actionview ruby-on-rails-6

5
推荐指数
2
解决办法
2705
查看次数

如何在"render:template => ..."之后访问"assign"?

我的ApplicationController中有一个错误处理方法:

rescue_from ActiveRecord::RecordNotFound, :with => :not_found

def not_found(exception)
  @exception = exception
  render :template => '/errors/not_found', :status => 404
end
Run Code Online (Sandbox Code Playgroud)

RAILS_ROOT/app/views/errors/not_found.html.erb,我有这个:

<h1>Error 404: Not Found</h1>
<%= debug @exception %>
Run Code Online (Sandbox Code Playgroud)

@exception总是nil在那里.我试过了debug assigns,但总是这样{}.打电话时不会复制分配render :template吗?如果是这样,我怎么能得到它们?

我在边缘Rails.

ruby ruby-on-rails actionview

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

在Rails中缺少请求的模板时呈现默认模板

对于插件,我想将以下功能入侵到Rails:

当(部分)模板不存在(无论格式如何)时,我想渲染默认模板.

所以说如果users/index.html.erb不存在(或其他格式),我会调用一个'users/index'动作,应该呈现'default/index.html.erb'.

同样,如果我调用某个操作'locations/edit'并且'locations/edit.html.erb'不存在,则应该呈现'default/edit.html.erb'

对于partials,如果我调用一个动作'locations/index'并且模板'locations/index.html.erb'调用不存在的部分'locations/_location',它应该呈现'default/_object'

解决方案是seek,允许我访问模板变量(例如@users,@ locations)和所请求路径的信息(例如用户/索引,位置/编辑).它也应该与偏见一起使用.

我想到了一些选项,我将在下面发布.他们都不是完全令人满意的.

ruby-on-rails render actionview

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

从Rails Gem为视图提供新方法的正确方法是什么?

如果我想创建一个新的rails gem,为Rails视图添加方法,那么正确的方法是什么?它是否扩展ActionView :: Base?它会以某种方式涉及ApplicationHelper吗?

ruby-on-rails actionview

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

如何防止Rails从Action查看生产中的日志记录

在rails 3.2.0中,是否可以在生产环境中关闭用于在ActionView :: LogSubscriber中呈现视图的rails日志记录.

目前只有我发现supress的方法是对它进行修补并通过以下方式增加日志级别进行调试.有没有更好的方法来执行此操作或任何配置?

 module ActionView
    class LogSubscriber
       def render_template(event)
            message = "Rendered #{from_rails_root(event.payload[:identifier])}"
            message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout]
            message << (" (%.1fms)" % event.duration)
            debug(message)
       end
          alias :render_partial :render_template
          alias :render_collection :render_template
     end
  end
Run Code Online (Sandbox Code Playgroud)

actionview ruby-on-rails-3.2

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

在Rails命名空间控制器中调用form_for时无法解决"ArgumentError:Missing block"

在应用程序的管理面板中,应该引入新表单.我想使用2.3依赖RoR指南中描述的记录识别,但如果我说的话

form_for(@product)
Run Code Online (Sandbox Code Playgroud)

要么

form_for [:backend, @product]
Run Code Online (Sandbox Code Playgroud)

它扔了一个ArgumentError: Missing block.这是用于后端 - 新功能,控制器在其中controller/backend/product_controller定义

 def new
   @product = Product.new
end
Run Code Online (Sandbox Code Playgroud)

我做错了什么?为什么这不起作用?

ruby-on-rails actionview ruby-on-rails-3.2

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