小编Gre*_*ass的帖子

如何测试文件是否在控制器中上传?

我正在尝试在上传图片时测试我的用户是否有照片值.它在浏览器中工作正常,测试的基本功能通过,但如果我试图断言user.photo不是nil,它就会失败.这是测试

describe 'POST #update' do
  context 'when there is an image' do
    it 'renders the crop template' do
      login(user)
      photo = File.open(File.join(Rails.root, '/spec/fixtures/images/bob-weir.jpg'))
      post :update, user: { photo: photo }

      expect(response).to render_template('crop')
      user.reload
      expect(user.photo.file).to_not be_nil
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

正在生产:

Failure/Error: expect(user.photo.file).to_not be_nil
       expected: not nil
            got: nil
Run Code Online (Sandbox Code Playgroud)

如果我在测试结束时调试器并执行user.photo,我会得到:

(byebug) user.photo

#<PhotoUploader:0x007fa447029480 @model=#<User id: 226, ..... photo: nil>,
@mounted_as=:photo, @storage=#<CarrierWave::Storage::File:0x007fa4468ddbb8 
@uploader=#<PhotoUploader:0x007fa447029480 ...>>>
Run Code Online (Sandbox Code Playgroud)

有没有办法确保控制器实际上在数据库中保存了照片值?它只是模型的一个属性,它将文件名保存为字符串.

rspec uploader carrierwave ruby-on-rails-4 factory-bot

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

Rails 4 Action Mailer Previews和Factory Girl问题

在处理Rails 4动作邮件预览和工厂女孩时,我遇到了一个非常烦人的问题.这是我的一些代码的示例:

class TransactionMailerPreview < ActionMailer::Preview
  def purchase_receipt
    account = FactoryGirl.build_stubbed(:account)
    user = account.owner
    transaction = FactoryGirl.build_stubbed(:transaction, account: account, user: user)
    TransactionMailer.purchase_receipt(transaction)
  end
end
Run Code Online (Sandbox Code Playgroud)

这可能是任何动作邮件预览.让我说我得到了一些错误(每次都发生),并且有一个错误.我修复了错误并刷新了页面.每次发生这种情况我都得到:

"Rails中的ArgumentError :: MailersController#preview用户的副本已从模块树中删除但仍处于活动状态!"

然后我唯一的出路是重启我的服务器.

我在这里错过了什么吗?有关导致这种情况的原因以及如何避免这种情况的任何线索?因为这个原因,过去一周我已经重启了我的服务器100次.

编辑:在我编辑代码并刷新预览的任何时候,它实际上可能会发生?

actionmailer ruby-on-rails-4 factory-bot

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

Rails 4强参数,包含多个对象和整数键

我一次提交一个包含2-4个对象的表单,具体取决于父项的数量.我意识到这可能是非常规的,但我真的希望用户能够在一个表单上一次编辑所有对象.在我的表格上,我正在做:

<%= simple_fields_for "derps[]", derp do |f| %>

<% end %>
Run Code Online (Sandbox Code Playgroud)

然后我在控制器中这样做:

def update
  @derps = []
  @rejects = []
  derps_params.each do |key, hash|
    derp = Derp.find(key)
    derp.assign_attributes(hash)
    @rejects << derp unless derp.save
  end
  if @rejects.empty?
    redirect_to @parent, flash: {success: 'Derps were successfully updated.'}
  else
    @derps = @rejects
    render :edit
  end
end
Run Code Online (Sandbox Code Playgroud)

让我们说有两个对象 - params正在通过:

"derps"=>{"1"=>{"attribute"=>"39", "another_attribute"=>"serp", "a_third_attribute"=>"yerp"}, "2"=>{"attribute"=>"30", "another_attribute"=>"49", }}
Run Code Online (Sandbox Code Playgroud)

我在Rails 3中工作时没有强大的参数.我正在升级到rails 4,我正在努力解决这个问题 - 我不断获得"未经许可的参数:1,2"

我假设我需要做以下事情:

def mashes_params
  params.require(:derps).permit(
  id: []
Run Code Online (Sandbox Code Playgroud)

要么

def mashes_params
  params.require(:derps).permit(
  :id, 
Run Code Online (Sandbox Code Playgroud)

沿着这些方向的东西,但我已经尝试过每一个我能想到没有运气的方式.

这里有什么想法?

ruby-on-rails strong-parameters ruby-on-rails-4

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

对特定页面仅使用一次turbolinks:load 事件?

我有一些代码只想在应用程序的一页上运行,因此在 HTML 中我使用以下内联 JS:

<script>
  $(document).on('turbolinks:load', function() {
    console.log("Ground control to major tom?")
  });
</script>
Run Code Online (Sandbox Code Playgroud)

但是,当用户离开该页面时,该代码仍在每次后续访问中运行。

如何仅对特定页面使用turbolinks:load 事件?

我是否需要以某种方式“拆除”该事件处理程序?我如何防止它影响我可能拥有的任何其他 Turbolinks:load 事件?

turbolinks turbolinks-5

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

轻量级zxcvbn替代?

想知道是否有任何轻量级zxcvbn替代品.我不是那种需要我的密码强度计难以置信的规模 - 相反,我需要保持我的资产规模.

有没有人有任何轻量级可以让我说,80%的方式那里 - 也许没有文件中的整个字典(我假设大部分的大小来自哪里)?

javascript passwords web-applications

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

Ruby/Rails - 上周五获得?(上周五)

有没有办法在Rails中获得上周五的日期?我已经看到了如何获得最接近的星期五,或者上周一或周日,但我特别需要上周五.

因此,直到本周的周五,也就是上周五的周五.然后从星期六开始,这是前一天的星期五.

例如:

  • 3月4日星期六,3月10日星期五 - > 3月3日星期五
  • 3月11日星期六至3月5日星期五.17日 - > 3月10日星期五

ruby ruby-on-rails date

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

Ruby/Rails:如何以科学记数法显示数字?

我认为这将是一个简单的,但我无法在任何地方找到任何相关的信息.让我们说用户输入123456.我想用科学记数法显示它.所以这将是1.23456*10 ^ 5.我认为ruby或rails会有一个辅助方法,比如scientific_notation(123456),但我找不到任何东西.这可能吗?

更进一步,如果用户输入科学记数法,那么处理数字呢?例如,他们输入1.23456x10 ^ 6 - rails解析它并将123456存储在数据库中.

我意识到第二部分是远景.

ruby ruby-on-rails scientific-notation

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

生产中的Rails JavaScript错误:'赋值中的左侧无效'

我的Rails 5应用程序在开发中工作正常,但在生产中抛出了JS错误:

未捕获的ReferenceError:赋值中的左侧无效

在我的开发计算机上,只有生产服务器上不会发生此错误.javascript预编译为生产中的一行,因此我无法看到问题所在.

我尝试rake assets:precompile --trace RAILS_ENV=production在我的开发机器上运行,但它不会在那里抛出任何错误.

关于我如何尝试调试这个的任何线索?

javascript ruby-on-rails asset-pipeline

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

JavaScript ES6 - 只采用嵌套JSON数组的某些键/部分的简明方法?

我有一个存储在我的应用程序状态的JSON数据数组.它包括详细页面需要的属性(大约10个不同的字段).

我的列表视图只需要其中两个.例如,:

[
  {
    "id": 1,
    "title": 'Derp',
    "subtitle: 'Derp',
    "another": 'Derp,
    //... more attributes
  },
  {
    "id": 2,
    // ... etc
  }
]
Run Code Online (Sandbox Code Playgroud)

我的列表视图仅涉及id,title和subtitle.获取相同数据的最简洁方法是什么,但只能使用我指定的密钥?

我应该使用地图吗?还是解构?

编辑:非常感谢警方出现的努力答案.这对我帮助很大,我确实尝试了一段时间来弄清楚如何做到这一点.我来自Ruby,所以ES6不是我的专长.

用例是仅从包含所有数据属性的全局Redux存储返回React组件所需的内容.例如,我的列表视图只需要来自JSON数据的2/3属性.我正在使用redux 选择器来做到这一点.

第二个/帖子后问题:这种类型的方法有没有名称,你只接受部分JSON?我想在redux选择器中创建一个方法,我需要提出一个名称.我想把它称为减速器,但这并不是很有效,因为术语reducer已经在Redux世界中用于修改状态的方法.

javascript ecmascript-6 redux

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