小编YWC*_*llo的帖子

如何使用Simple Form Rails添加HTML属性以选择选项?

我需要一个自定义的HTML属性添加到每option一个select控制.我在Rails中使用simple_form.有谁知道如何做到这一点?该属性将由客户端JS使用.

例如,我想做这样的事情:

<%= f.input :group, collection: @groups, option_html: { data-type: lambda { |g| g[2] } } %>
Run Code Online (Sandbox Code Playgroud)

哪个会产生(简化):

<select>
    <option value="1" data-type="primary">First Group</option>
    <option value="2" data-type="secondary">Second Group</option>
    <option value="3" data-type="secondary">Third Group</option>
</select>
Run Code Online (Sandbox Code Playgroud)

@groups可能是这样的:

[
    ['First Group', 1, 'primary'],
    ['Second Group', 2, 'secondary'],
    ['Third Group', 3, 'secondary']
]
Run Code Online (Sandbox Code Playgroud)

希望避免必须制作自定义控件/包装器.谢谢!

ruby-on-rails simple-form

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

如何正确处理Express中的错误?

我开始使用Express JS并遇到了一个问题.我似乎无法弄清楚处理错误的正确方法.

例如,我有一个Web服务API,它提供一个名为"event"的对象.当用户提交未找到的事件ID时,我想返回一个简单的"无法查找事件"字符串.以下是我目前正在构建代码的方式:

app.get('/event/:id', function(req, res, next) {
    if (req.params.id != 1) {
        next(new Error('cannot find event ' + req.params.id));
    }

    req.send('event found!');
});
Run Code Online (Sandbox Code Playgroud)

当我提交1以外的ID时,Node会崩溃并输出以下内容:

http.js:527
   throw new Error("Can't set headers after they are sent.");
         ^
Error: Can't set headers after they are sent.
    at ServerResponse.<anonymous> (http.js:527:11)
    at ServerResponse.setHeader (/usr/local/kayak/node_modules/express/node_modules/connect/lib/patch.js:62:20)
    at /usr/local/kayak/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js:72:19
    at [object Object].<anonymous> (fs.js:107:5)
    at [object Object].emit (events.js:61:17)
    at afterRead (fs.js:878:12)
    at wrapper (fs.js:245:17)
Run Code Online (Sandbox Code Playgroud)

从我通过使用node.js 调试器可以看出,在next()调用后继续执行代码块,这意味着req.send('event found!')尝试运行.我不希望这种情况发生.

我发现的唯一解决方法是简单地抛出一个new Error()而不是"next-ing"它,但这会导致生成默认的Express …

javascript middleware node.js express

24
推荐指数
3
解决办法
3万
查看次数

指定格式:使用render_to_string忽略"xml"

我有一个需要将视图呈现为字符串的操作.该视图称为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

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

如何配置WEBrick以使用HTTPS的中间证书?

我目前在我的Rails应用程序中使用以下选项来启用WEBrick的HTTPS:

{
    :Port => 3000,
    :environment => (ENV['RAILS_ENV'] || "development").dup,
    :daemonize => false,
    :debugger => false,
    :pid => File.expand_path("tmp/pids/server.pid"),
    :config => File.expand_path("config.ru"),
    :SSLEnable => true,
    :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
    :SSLPrivateKey => OpenSSL::PKey::RSA.new(
        File.open("certificates/https/key.pem").read),
    :SSLCertificate => OpenSSL::X509::Certificate.new(
        File.open("certificates/https/cert.pem").read),
    :SSLCertName => [["CN", WEBrick::Utils::getservername]]
}
Run Code Online (Sandbox Code Playgroud)

我如何指定中间证书?

rack openssl webrick ruby-on-rails-3

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

在哪里放置固定装置?

我应该在哪里定义使用ember-cli生成的Ember JS应用中的灯具?我尝试了很多地方,比如app.js在一个名为"灯具"的文件夹中.

ember.js ember-data

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

Capistrano甚至用"set:use_sudo,false"使用sudo

我不希望通过Capistrano使用sudo执行任何远程执行的命令.具体来说,当我运行时cap deploy:setup,在第一个mkdir命令期间我被要求输入我的sudo密码.我添加set :use_sudo, false到我的deploy.rb文件中,但这并没有什么区别.

我从一个相当完整的deploy.rb文件开始,但是一旦我遇到问题就将其削减.这是我的最小版本仍然显示use_sudo不受尊重:

# App Definitions

set :domain, '[server-ip]'
role :app, domain
role :web, domain
role :db, domain, :primary => true

set :user, "my_app"
set :use_sudo, false

task :sudo_test do
  run "#{try_sudo} whoami"
end
Run Code Online (Sandbox Code Playgroud)

运行cap sudo_test导致我被提示输入我的sudo密码.我在这里想念的是什么(除了我已经拔出的头发)?

谷歌调查结果

https://groups.google.com/forum/?fromgroups#!topic/capistrano/QNYnvW8obrg

有人有类似问题的帖子.线程中没有结论/解决方案.

sudo capistrano ruby-on-rails-3 rvm-capistrano

7
推荐指数
2
解决办法
2万
查看次数

如何在不引发错误的情况下将 sidekiq 任务/作业标记为重试?

我使用 Sidekiq 队列来处理与不可靠的 3rd 方 API 的通信。由于此 API 通常一次关闭几分钟然后再次备份,因此 Sidekiq 非常方便。当发生连接问题时,会引发错误,Sidekiq 会将作业扔回队列中,以便稍后在一段时间后再次重试。

我使用 NewRelic 不仅可以帮助调试崩溃,还可以用于监控。我的问题是上述当前的方法会在 NewRelic 中产生错误。如果第 3 方 API 关闭超过几分钟,错误计数会累积到足以导致通过 NewRelic 发送通知。

我想要做的只是在某项工作发生一定次数的重试时才从我的工作人员那里引发错误。我是sidekiq_retries_exhausted用来做这个的。我的问题是,我不太确定如何在出现错误后将作业放回队列而不引发错误。

Sidekiq 是否提供任何设施来将作业返回到队列,增加作业的重试次数,并让它坐在那里直到它再次运行,就好像在工作类中引发了异常一样?

ruby-on-rails sidekiq

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

为什么我的MySQL实例会认为“'”?和“ i”是相等的字符?

我遇到了MySQL中的唯一性约束问题。我有两个不同的角色:

  • ? 这是ASCII十进制299
  • i 这是ASCII十进制109

为什么MySQL认为这些相等?当我运行以下命令时:

SELECT STRCMP('?', 'i')
Run Code Online (Sandbox Code Playgroud)

我得到的返回值为0

根据请求,以下是有关我的环境的一些信息:

mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_unicode_ci   |
+--------------------------+----------------------+
Run Code Online (Sandbox Code Playgroud)

mysql collation

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

ActiveRecord在MySQL中为Decimal时将属性视为Integer

我觉得我在这里服用疯狂的药片.我有一个MySQL支持的ActiveRecord类,并且在Rails中将一些属性报告为Integer类型:

Device.last.score.class # returns `Fixnum`
Run Code Online (Sandbox Code Playgroud)

MySQL报告列类型decimal(10,0).

我在这里错过了什么?甚至试过打过电话reset_column_information.迁移看起来正确,架构文件看起来也不错.

注意:这个问题在开发中没有发生,我正在使用SQLite.

这是我的迁移:

class AddScoreColumnToDevices < ActiveRecord::Migration
    def change  
        add_column :devices, :score, :decimal
    end
end
Run Code Online (Sandbox Code Playgroud)

mysql activerecord ruby-on-rails

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