小编Ben*_*enj的帖子

无法将变量传递给手柄中的部分3

试图将变量传递给部分而没有成功.


尝试1:传递模板上下文

"产品"模板:

From template: {{product.name}} 
<br>
{{> product_buttons}}
Run Code Online (Sandbox Code Playgroud)

"product_buttons"部分:

From partial: {{product.name}}
Run Code Online (Sandbox Code Playgroud)

输出:

From template: Awesome Steel Shoes
<br>
[object Object]
From partial: 
Run Code Online (Sandbox Code Playgroud)

我们可以看到2个问题:

  • partial不会呈现预期值.我还尝试使用{{> product_buttons this}{{> product_buttons product=product}完全相同的结果渲染模板
  • [object Object]插入输出中

尝试2:传递哈希变量

"产品"模板:

From template: {{product.name}} 
<br>
{{> product_buttons thename=product.name}}
Run Code Online (Sandbox Code Playgroud)

"product_buttons"部分:

From partial: {{thename}}
Run Code Online (Sandbox Code Playgroud)

这会Uncaught TypeError: Cannot read property 'thename' of undefined从编译的部分中引发以下行的错误:

return "From partial: "
+ this.escapeExpression(((helper = (helper = helpers.thename || (depth0 != null ? depth0.thename : depth0)) …
Run Code Online (Sandbox Code Playgroud)

javascript handlebars.js

10
推荐指数
1
解决办法
1189
查看次数

Rails:如何从字符串中检查CSS或JS代码?

在一个code字符串中我存储了一段代码,可以是CSS,SASS,SCSS,JavaScript或CoffeeScript.内容来自用户,我需要在保存到数据库之前验证语法.

我需要检查语法是否正确.目前,我正在使用一个有效的丑陋黑客.你有更好的解决方案吗?

def check_js
  if language == 'coffee'      # CoffeeScript
    CoffeeScript.compile code
  else                         # JavaScript
    Uglifier.compile code
  end
rescue ExecJS::RuntimeError => e
  errors.add :code, e.message
end

def check_css
  if language == 'css'         # CSS
    Sass::CSS.new(code).render
  else                         # SASS, SCSS
    Sass.compile code, syntax: language.to_sym
  end
rescue Sass::SyntaxError => e
  errors.add :code, e.message
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails sass coffeescript

9
推荐指数
1
解决办法
444
查看次数

猴子修补ActiveStorage :: Attachment丢失

因此,我决定向urlActiveStorage :: Attachment对象添加attr_accessor。

开发中,该补丁会保留一段时间,直到看起来“已丢失”为止。这意味着它可以工作几分钟,然后不再工作。然后,我需要重新启动服务器才能再次应用补丁。我认为我没有正确打补丁,因此我需要在该方面提供建议。


这是我尝试过的:

lib / ext / active_storage / attachment.rb

第一次尝试 :

module ActiveStorageUrl
  extend ActiveSupport::Concern

  included do
    attr_accessor :url
  end
end

ActiveStorage::Attachment.send :include, ActiveStorageUrl

Run Code Online (Sandbox Code Playgroud)

第二次尝试

class ActiveStorage::Attachment < ActiveRecord::Base
  attr_accessor :url
end
Run Code Online (Sandbox Code Playgroud)

顺便提一下,在这两种情况下,它都装有:

config / initializers / monkey_patches.rb

require 'ext/active_storage/attachment'
Run Code Online (Sandbox Code Playgroud)

So when it work I have no error message, but after a while the patch "diseapear" (lacking better terms), and I get the following error, telling me my attr_accessor is not there anymore. …

ruby monkeypatching ruby-on-rails ruby-on-rails-5 rails-activestorage

9
推荐指数
2
解决办法
306
查看次数

瘦服务器:将应用程序日志输出到控制台,就像'rails s'一样

我需要运行thin startthin -ssl ... start我的Rails应用程序的根目录中,看到输出应用程序日志到控制台,类似什么rails s

ruby-on-rails thin

7
推荐指数
1
解决办法
3161
查看次数

Errno :: ENOENT:功能测试后没有这样的文件或目录@ rb_file_s_mtime

运行功能Rspecs时,我收到以下错误(此消息底部的完整跟踪)

美洲狮输出

Rack app error handling request { GET /rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSm5kbUZ5YVdGdWRITXZSM0IxTkRGRFRWQlFaVXRNYVUxaVpuQjZXVmw1UTNBMUx6RXhNR1V3TVRka01UWTVNalZrWXpkak5UQTNNamhqT1dNeE5UUmhOREl3TURjNVlXRTJaVFZtWTJNME16VmtZak5sTm1VNU4ySXhNemd3WldObFl6Z0dPZ1pGVkRvUVpHbHpjRzl6YVhScGIyNUpJajFwYm14cGJtVTdJR1pwYkdWdVlXMWxQU0pwYldGblpTNXdibWNpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSjJsdFlXZGxMbkJ1WndZN0JsUTZFV052Ym5SbGJuUmZkSGx3WlVraURtbHRZV2RsTDNCdVp3WTdCbFE9IiwiZXhwIjoiMjAxOS0wMS0yNVQxMToxNjoyOS40NDBaIiwicHVyIjoiYmxvYl9rZXkifX0=--db9451afdc95b292aa6a77c40e00ab0ceb687766/image.png }
#<Errno::ENOENT: No such file or directory @ rb_file_s_mtime - /path/to/rails/app/tmp/storage/va/ri/variants/Gpu41CMPPeKLiMbfpzYYyCp5/110e017d16925dc7c50728c9c154a420079aa6e5fcc435db3e6e97b1380ecec8>
(followed by the full trace at the end of this message)
Run Code Online (Sandbox Code Playgroud)

Rspec outpout

Failure/Error: last_modified = ::File.mtime(path).httpdate

Errno::ENOENT:
No such file or directory @ rb_file_s_mtime - /path/to/rails/app/tmp/storage/va/ri/variants/Gpu41CMPPeKLiMbfpzYYyCp5/110e017d16925dc7c50728c9c154a420079aa6e5fcc435db3e6e97b1380ecec8
(followed by the full trace at the end of this message)
Run Code Online (Sandbox Code Playgroud)

上下文

product.image是一个ActiveStorage附件.在测试期间,"products/_form"部分被渲染并显示附件文件(即png图像),其代码如下:= image_tag url_for(product.image.variant(resize: "120x120")).如果我注释掉这一行,则不再出现错误.

测试本身每次都会成功,测试后似乎会触发错误.我验证了所有的after块,它似乎发生在我所有的后块之后.

跟踪表明ActiveStorage::DiskController.serve_file触发了错误.是不是ActiveStorage应用程序没有正常关闭?

我正在使用active_storage.service = :test配置,但:file给出了相同的错误. …

rspec ruby-on-rails rails-activestorage

7
推荐指数
1
解决办法
1434
查看次数

jquery-file-upload:破坏后如何​​获取服务器响应?

我正在使用jquery-file-upload,并且在destroy操作完成后尝试从服务器接收数据没有成功

我可以看到firebug服务器正确响应了我在破坏操作完成后我预期的json数据(我使用rails作为后端),但在jquery方面我没有成功获取响应数据.我尝试了jquery-file-upload提供的不同回调,但没有成功

有什么提示吗?:)

为了澄清,我试图做这样的事情:

$('#fileupload').bind('fileuploaddestroyed', function(e, data) {
  console.log(data.response.my_value);
});
Run Code Online (Sandbox Code Playgroud)

jquery ruby-on-rails

6
推荐指数
1
解决办法
1564
查看次数

Rspec:运行外部rails服务器

这个问题是关于从rspec环境启动外部项目的rails服务器.

有2个项目.

  • 第一个项目充当管理员后台,它是用户与网页交互的中央应用程序.我称之为BackOffice
  • 第二个项目是一个Json API服务器,它将通过json请求从Admin Back Office接收命令.我称之为ApiServer

我正在尝试测试这两个rails项目之间的API交互,我想设置rspec,这样我就可以在BackOffice项目中编写和维护我的spec文件.这些规范将启动ApiServer rails服务器,然后播放以执行测试.

我的问题是关于启动ApiServer rails服务器.在查看rails app初始化文件后,我假设我必须向"config/environment"添加一个require.


但是当我插入BackOffice/spec/spec_helper.rb时

require File.expand_path('../../../ApiServer/config/environment', __FILE__)
Run Code Online (Sandbox Code Playgroud)

我收到了错误

`initialize!': Application has been already initialized. (RuntimeError)
# Backtrace to the file:
# ApiServer/config/environment.rb
# Line:
# Rails.application.initialize!
Run Code Online (Sandbox Code Playgroud)

我还尝试在反引号中简单地调用以下内容

`cd /api/path; bundle exec rails s -p 3002` 
Run Code Online (Sandbox Code Playgroud)

但得到了同样的错误


然后我从Capybara源代码中获得灵感,并且需要"ApiServer/application",然后我能够创建一个ApiServer.new对象,但是一旦我调用initialize!它就会得到相同的消息.

任何帮助是极大的赞赏.干杯

rspec ruby-on-rails

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

清理Rspec匹配器进行更改(型号,:计数).by(1)

我正在努力保持我的spec文件尽可能干净.使用'shoulda'宝石并编写遵循相同模式的自定义匹配器.

我的问题是创建一个自定义匹配器,它将包装expect{ post :create ... }.to change(Model, :count).by(1)并可以与其他'shoulda'匹配器在相同的示例组中使用.详情如下:

自定义匹配器(简化)

RSpec::Matchers.define :create_a_new do |model|
  match do |dummy|
    ::RSpec::Expectations::ExpectationTarget.new(subject).to change(model, :count).by(1)
  end
end
Run Code Online (Sandbox Code Playgroud)

工作实例

describe 'POST create:' do
  describe '(valid params)' do
    subject { -> { post :create, model: agency_attributes } }
    it { should create_a_new(Agency) }
  end
end
Run Code Online (Sandbox Code Playgroud)

只要我使用subjectlambda并且我的匹配器是示例组中唯一的匹配器,这项工作就可以了.

失败的例子

失败的例子1

在同一组中添加更多示例会使另一个匹配器失败,因为subject现在是lambda而不是Controller的实例.

describe 'POST create:' do
  describe '(valid params)' do
    subject { -> { post :create, model: agency_attributes } }
    it { should create_a_new(Agency) } …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rspec2 ruby-on-rails-4

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

Rails 4:控制器,模型和视图中可用方法的好位置

我只是从cancan迁移到pundit,我很喜欢cancan语法来检查授权:can? :show, @user.使用专家,编写相同的验证policy(@user).show?.我觉得它不太可读.所以我正在写一个2小包装器:

def can?(model, action)
  policy(model).send(action)
end

def cannot?(model, action)
  ! can?(model, action)
end
Run Code Online (Sandbox Code Playgroud)

我的问题是:在Rails 4中,2个包装器的最佳位置是什么,知道我在控制器和视图中使用它们.还没有在模型中,但后来可能会成为现实,所以说:到处都是.

  • 如果我使用视图助手,它们仅在视图中可用
  • 如果我使用应用程序控制器助手,测试视图时rspec不能使用它们,我相信在模型中不可用

任何指针都赞赏,谢谢

ruby-on-rails ruby-on-rails-4

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