小编Chr*_*art的帖子

如何使用其他方法扩展ActiveRecord :: Migration?

我正在创建一个Ruby gem,并希望使用我自己的帮助程序扩展ActiveRecord :: Migration,以创建必要的列.(这类似于Devise在为各种身份验证策略创建迁移时所做的事情.)我意识到我添加的功能本身非常简单,并且可能有更好/更有效的方法 - 我正在尝试这样做学习经验而不是实际应用.我只是想了解如何在Rails中添加新的迁移功能这样具有侵入性.

到目前为止,我已经成功构建了一个gem并安装,但是当我尝试运行如下的迁移:

class CreatePosts < ActiveRecord::Migration
  def self.up
    create_table :posts do |t|
      t.string :name
      t.string :title
      t.text :content
      t.hideable
      t.tracks_hidden_at
      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

...它没有说可隐藏的未定义.

我已经研究过Devise做到这一点的方式,我不得不承认我有点失落,但我试图摸索它.我做了以下事情:

使用我的新模型添加扩展了ActiveRecord,并创建了一种基于我的新迁移方法应用模式更改的方法

require 'orm_adapter/adapters/active_record'

module HiddenRecord
  module Orm
    # This module contains some helpers and handle schema (migrations):
    #
    #   create_table :accounts do |t|
    #     t.hideable
    #     t.tracks_hidden_timestamp
    #   end
    #
    module ActiveRecord
      module Schema
        include HiddenRecord::Schema

        # Tell how to apply schema methods.
        def apply_hiddenrecord_schema(name, type, options={})
          column name, …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails

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

编写二进制文件时编码:: UndefinedConversionError

我有一个网站需要加密和存储上传到服务器的二进制文件.上传和存储工作正常,但我在尝试编写加密文件时收到此错误:

编码:: UndefinedConversionError(从ASCII-8BIT到UTF-8的"\ xDD"):

导致它的代码如下所示:

fd_in = IO.sysopen(self[:name].tempfile.path, "rb")                           
file_in = IO.open(fd_in)                                                      
fd_out = IO.sysopen(self[:name].tempfile.path + ".encrypted", "wb")           
file_out = IO.open(fd_out)                                                    
cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')                           
cipher.encrypt                                                                                                         
cipher.key = cipher_key                                                     
cipher.iv = cipher_iv                                                       
while chunk = file_in.read(1024)                                              
  file_out << cipher.update(chunk)                                            
end
file_out << cipher.final
Run Code Online (Sandbox Code Playgroud)

导致错误的行是while循环中的file_out << cipher.update(chunk).我在网上查了一下,发现了一些类似ASCII/UTF转换问题的报告,但它们似乎都是基于强制字符串输入,而不是流文件输入.我正在使用Ruby 1.9.2,我相信它会影响默认的字符串编码.

我的理由为什么(我认为)我需要使用基于流的方法:文件往往很大,我不想将整个文件(输入或输出)加载到内存中来处理它.

任何帮助表示赞赏.谢谢.

ruby ruby-on-rails

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

在不使用FormBuilder的情况下访问fields_for中的嵌套模型属性

我有一个Rails表单,用于创建和编辑具有has_many关系的模型.我对嵌套模型的典型表单非常熟悉,但我当前的问题需要使用典型的FormBuilder助手和使用模型本身数据的其他HTML元素来访问渲染一些表单元素.例如,我的顶级表单具有以下内容:

<% customer_form.fields_for :customer_images do |images_form| %>
    <%= render :partial => 'customer_image_show', :locals => { :f => images_form } %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后,在部分形式,我需要做的事情如下:

<dd><%= f.text_field :image_description %></dd>
Run Code Online (Sandbox Code Playgroud)

...还可以访问customer_images模型中的属性(例如,customer_image记录的ID).

我觉得这应该是非常简单的,我只是缺少一些基本的东西.任何帮助表示赞赏.这是一个Rails 2.3.8应用程序.

ruby ruby-on-rails

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

Xcode storyboard视图控制器中的多个视图,其中一个不会出现在storyboard编辑器中

我无法更新其他人在Xcode中创建的项目.这是一个内置在故事板中的应用程序,在一种情况下,有一个带有视图控制器的场景,它在故事板编辑器的文档轮廓调色板下面有多个视图(如附图所示).第一个视图是在单击时在故事板编辑器中突出显示的视图,以及在视图中更改视图更新的设计或对象时的视图.有一个第二个视图(退出和第一个响应者下面的视图)以某种方式附加到该场景但我无法弄清楚如何编辑该视图的设计.如果我点击该视图或其中任何一个孩子,我可以在右侧的各个检查员(连接,属性等)中清楚地看到他们的属性.

(编辑1 - 此问题的原始版本表明这些附加视图用于切换到横向时所需的特殊布局.实际上它们的使用比例更普遍,例如,在活动视图上显示弹出窗口时.)

无论如何,我的主要兴趣是能够修改第二个视图.似乎必须有一种方法可以在编辑器中看到它,我只是想念它.我已经搜索了关于在故事板中实现纵向和横向视图的教程(似乎没有使用这种方法),对于像"故事板场景中的多个视图"这样的短语,并查看了菜单选项(包括一个有前途的选项"unmbed",当时选择了第二个视图,但单击它时会从场景中删除视图,然后我找不到它.我不知道去哪里学习更多东西.如何编辑此视图?任何帮助表示赞赏.

在文档大纲中的ViewController场景

xcode uiview ios xcode4.2 uistoryboard

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

是否可以在Heroku Cedar上运行capybara-webkit(即forked webkit_server)?

我需要在Rails应用程序中运行capybara-webkit以启用带有JavaScript支持的无头Web浏览(即不用于测试/ CI目的,webrat或其他验收测试驱动程序/框架将不起作用).我想知道Heroku部署是否可行,特别是因为它需要QtWebKit并能够通过套接字通信分叉webkit_server进程.我对如何在Heroku上进行这项工作(例如工人dynos池)有创意.我希望有人能更好地处理Heroku环境中存在的约束,或者可以断然排除这种可能性,以便我可以在必要时转移到AWS EC2.

对此进行搜索往往会对CI服务器的水豚测试和附加组件产生很大影响,这两者都与我的用例无关.我没有测试任何东西(至少没有测试传统的黄瓜/ rspec /等) - 我正在使用Capybara与webkit驱动程序,finders和node/element模型的集成来导航需要大量客户端的网站 - 方JS为了工作.

我也对其他(本机Ruby)解决方案持开放态度,以便使用支持JavaScript的DOM以编程方式与网站进行交互.

ruby qt ruby-on-rails heroku capybara

11
推荐指数
2
解决办法
2684
查看次数

从Ruby中的Capybara运行时,webkit_server会定期挂起

我遇到的问题是,当访问URL时,带有Capybara和capybara-webkit的webkit_server实例无法连接到本地Xvfb屏幕.这似乎发生在反复访问不同的URL和执行查找程序几分钟后.(我使用capybara用于香草Ruby中的屏幕抓取应用程序,而不是用于测试.)

我已经确认,当它挂起时,仍然可以访问该站点(例如,通过命令行上的curl或wget).我还尝试包装调用Timeout块中的访问和后续查找程序的Ruby代码,以便在等待60秒后访问新URL,但任何visit()尝试在第一次发生后都会失败.解决问题的唯一方法是同时杀死调用Capybara/capybara-webkit和webkit_server进程并重新启动的Ruby进程.

当我对webkit_server进程进行分析时,我会反复看到这样的输出:

clock_gettime(CLOCK_MONOTONIC, {5821, 680279627}) = 0
gettimeofday({1330890176, 712033}, {0, 33052112}) = 0
gettimeofday({1330890176, 712087}, {0, 140736435864256}) = 0
gettimeofday({1330890176, 712137}, {0, 33108640}) = 0
clock_gettime(CLOCK_MONOTONIC, {5821, 680486036}) = 0
clock_gettime(CLOCK_MONOTONIC, {5821, 680530091}) = 0
read(7, 0x1fac1b4, 4096)                = -1 EAGAIN (Resource temporarily unavailable)
Run Code Online (Sandbox Code Playgroud)

如果我调用调用它的Ruby进程,它会挂在read()上:

Process 3331 attached - interrupt to quit
read(5, 
^C <unfinished ...>
Process 3331 detached
Run Code Online (Sandbox Code Playgroud)

我知道Ruby代码挂在Capybara visit()方法上.

关于我可以采取哪些措施进行故障排除或纠正这一点的任何想法都表示赞赏.我假设问题与某些资源webkit_server需要访问URL有关,但我不确定接下来要尝试什么.

谢谢!

ruby webkit qtwebkit capybara capybara-webkit

11
推荐指数
2
解决办法
2644
查看次数

覆盖Rails ActiveRecord销毁行为的最佳方法是什么?

我有一个应用程序,我想覆盖我的许多模型的破坏行为.用例是用户可能有合法需要删除特定记录,但实际上从数据库中删除该行会破坏影响其他相关模型的参照完整性.例如,系统的用户可能想要删除与他们不再开展业务的客户,但需要维护与该客户的交易.

看来我至少有两个选择:

  1. 将数据复制到必要模型中,有效地对我的数据模型进行非规范化处理,以便删除的记录不会影响相关数据.
  2. 覆盖ActiveRecord的"销毁"行为,以执行类似设置标志,指​​示用户"删除"记录并使用此标志隐藏记录的操作.

我错过了一个更好的方法吗?

选项1对我来说似乎是一个可怕的想法,尽管我喜欢听到相反的论点.

选项2似乎有些Rails-ish但我想知道处理它的最佳方法.我应该创建自己的继承自ActiveRecord :: Base的父类,重写那里的destroy方法,然后从我想要这种行为的模型中继承该类吗?我是否还应该覆盖查找器行为,因此默认情况下不会返回标记为已删除的记录?

如果我这样做,我将如何处理动态查找器?命名范围怎么样?

ruby activerecord ruby-on-rails

10
推荐指数
2
解决办法
5440
查看次数

在Rails应用程序中放置模型搜索逻辑的位置?

我试图弄清楚将多属性搜索表单逻辑放在Rails应用程序中的"最佳"位置.所讨论的搜索表单具有若干属性,这些属性可能具有或不具有值,并且数据类型在属性之间不同.(例如,有搜索选项来搜索具有两个数字,日期范围,字符串值等之间的价格属性的项目.)此外,所讨论的模型通过has_a/has_many关系具有多个嵌套属性,并且其中一些属性也是需要搜索.

厚模型的Rails口头禅,瘦控制器让我对尝试将搜索逻辑聚合到控制器中犹豫不决.但是,在模型中放置与构建搜索条件相关的逻辑似乎也不合适.最后,本着DRY的精神,我对将一堆特定的属性名称硬编码到某个模块中犹豫不决,因为我需要将类似的搜索逻辑应用于几个不相关的模型.也许搜索视图中表单字段的命名约定可用于构建正确的条件?(比如使用"min_","max_","startdate_"等前缀表示数据类型和搜索条件运算符,后缀是模型和/或属性的名称?)

我已经搜索了这方面的建议,但大多数建议似乎不灵活(硬编码属性名称,不支持嵌套属性)或使用基于路由的搜索,我认为这不会适合我的需要(其中5-10参数可以一次用于搜索).

有关"Rails方式"的任何建议吗?

search ruby-on-rails

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

如何使用ExpressJS在同一个响应对象上多次渲染?

我有一种情况,我需要在ExpressJS应用程序中使用相同的响应对象进行多次渲染.(基本上一个HTTP请求会触发多个后端请求,所有这些请求都可以在完成后立即开始将结果呈现给页面.)问题是我需要每个请求呈现一个视图(即我不认为我可以使用res.write()),据我所知,res.render()每次调用时都没有办法不结束响应或写标题.

我错过了什么?

node.js express

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

如何在package.json中包含依赖项时包含传递给npm安装程序的选项

我是node.js的新手所以请原谅我对一个简单问题的无知.我正在为一个node.js应用程序添加依赖关系到package.json,我想知道是否可以指定通常传递给npm install的命令行参数.例如,从命令行安装mongodb软件包时,可能需要传递一个选项:

npm install mongodb --mongodb:native
Run Code Online (Sandbox Code Playgroud)

他们使用package.json语法来指定应该使用命令行选项安装包吗?

node.js npm

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