小编bac*_*rhh的帖子

如何在Rails 4中在没有刷新的情况下在页面上提交表单和更新元素

我在尝试做一些我认为相当简单的事情时遇到了很多麻烦.

我有一个项目列表,比方说,todos.在该列表的底部,我有一个文本字段,我在其中添加新项目到该列表.我想这样做,以便新项目动态地添加到该列表的底部,而无需像聊天窗口那样刷新整个页面.

我提交了提交表单remote: true并成功提交,但没有重新加载页面,但我无法让新项目同时显示在列表的底部.我必须刷新页面才能看到更改.

我尝试了一些我在SO上找到的不同方法(这里不乏类似的问题)和网络,甚至是一个名为Sync的宝石,但每个都有自己的错误和问题,我无法工作正常.他们每个人都可能是自己的问题.所以我要问:是否有一个"配方"肯定会在Rails 4中成功实现这一点?

javascript ajax jquery ruby-on-rails ruby-on-rails-4

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

没有在Rails应用程序中使用Webpack 2在.js.erb视图中定义$

我正在从资产管道迁移到Rails 4应用程序中的Webpack 2。除了在.js.erb视图中使用jQuery的JS代码外,其他一切似乎都可以正常工作。

webpack.config.js的内容如下(指纹和压缩的省略代码):

const path = require('path')
const webpack = require('webpack')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const jsOutputTemplate = 'javascripts/[name].js'
const cssOutputTemplate = 'stylesheets/[name].css'

module.exports = {
  context: path.join(__dirname, '/app/assets'),
  entry: {
    application: ['./javascripts/application.js', './stylesheets/application.scss']
  },
  output: {
    path: path.join(__dirname, '/public'),
    filename: jsOutputTemplate
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
          presets: ['es2015']
        }
      },
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract(['css-loader', 'resolve-url-loader'])
      },
      {
        test: /\.s(a|c)ss$/,
        use: ExtractTextPlugin.extract(['css-loader', 'resolve-url-loader', 'sass-loader?sourceMap'])
      },
      { …
Run Code Online (Sandbox Code Playgroud)

jquery ruby-on-rails erb asset-pipeline webpack

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

如何使用RSpec测试记忆?

我的其中一个课程中有下一个代码:

class Settings < ActiveRecord::Base
  def self.current
    @settings ||= Settings.where({ environment: Rails.env }).first_or_create!
  end
  # Other methods
end
Run Code Online (Sandbox Code Playgroud)

基本行为:

  1. 它会在第一次通话时创建新记录.
  2. 它随后的调用返回相同的结果.
  3. 它会在每次更新后重置ivar,并在后续调用中返回与当前环境关联的第一个(也是唯一的)记录.

对于这种方法,我有下一个测试:

describe Settings do
  describe ".current" do
    it "gets all settings for current environment" do
      expect(Settings.current).to eq(Settings.where({ environment: 'test' }).first)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我对此感到不舒服,因为我实际上并没有测试memoization,所以我一直在关注这个问题的方法,我尝试过类似的东西:

describe ".current" do
  it "gets all settings for current environment" do
    expect(Settings).to receive(:where).with({ environment: 'test' }).once
    2.times { Settings.current }
  end
end
Run Code Online (Sandbox Code Playgroud)

但是此测试返回以下错误:

NoMethodError:
  undefined method `first_or_create!' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何使用RSpec测试此方法的memoization?

更新:

最后,我的方法如下: …

ruby ruby-on-rails memoization rspec2 rspec-rails

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

Rails 4,Devise记住令牌

我试图找到设计如何产生remember_token.

我注意到它是生成的(并存储在cookie中),即使DB中没有令牌列来保存它.我想了解它的工作原理,但我找不到合适的位置.

有人能指点我的源代码文件吗?

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

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

Rails延迟了工作和码头工人:增加了更多工人

我使用Docker运行我的rails应用程序.延迟作业由单个工作程序处理,该工作程序在一个单独的控制器中运行,worker并且在其内部工作程序使用命令运行bundle exec rake jobs:work.

我有几种类型的工作,我想移动到一个单独的队列,并为此创建一个单独的工作者.或至少有两名工人负责过程任务.

我尝试运行我的工作容器,env QUEUE=default_queue bundle exec rake job:work && env QUEUE=another_queue bundle exec rake job:work但这没有任何意义.它没有失败,是启动但不处理作业.

有没有办法让一个容器中有单独的工人?这是对的吗?或者我应该为每个我想做的工人创建单独的容器?

Thanx提前!

ruby-on-rails delayed-job docker

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