我正在创建一个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) 我有一个网站需要加密和存储上传到服务器的二进制文件.上传和存储工作正常,但我在尝试编写加密文件时收到此错误:
编码:: 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,我相信它会影响默认的字符串编码.
我的理由为什么(我认为)我需要使用基于流的方法:文件往往很大,我不想将整个文件(输入或输出)加载到内存中来处理它.
任何帮助表示赞赏.谢谢.
我有一个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应用程序.
我无法更新其他人在Xcode中创建的项目.这是一个内置在故事板中的应用程序,在一种情况下,有一个带有视图控制器的场景,它在故事板编辑器的文档轮廓调色板下面有多个视图(如附图所示).第一个视图是在单击时在故事板编辑器中突出显示的视图,以及在视图中更改视图更新的设计或对象时的视图.有一个第二个视图(退出和第一个响应者下面的视图)以某种方式附加到该场景但我无法弄清楚如何编辑该视图的设计.如果我点击该视图或其中任何一个孩子,我可以在右侧的各个检查员(连接,属性等)中清楚地看到他们的属性.
(编辑1 - 此问题的原始版本表明这些附加视图用于切换到横向时所需的特殊布局.实际上它们的使用比例更普遍,例如,在活动视图上显示弹出窗口时.)
无论如何,我的主要兴趣是能够修改第二个视图.似乎必须有一种方法可以在编辑器中看到它,我只是想念它.我已经搜索了关于在故事板中实现纵向和横向视图的教程(似乎没有使用这种方法),对于像"故事板场景中的多个视图"这样的短语,并查看了菜单选项(包括一个有前途的选项"unmbed",当时选择了第二个视图,但单击它时会从场景中删除视图,然后我找不到它.我不知道去哪里学习更多东西.如何编辑此视图?任何帮助表示赞赏.
我需要在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以编程方式与网站进行交互.
我遇到的问题是,当访问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有关,但我不确定接下来要尝试什么.
谢谢!
我有一个应用程序,我想覆盖我的许多模型的破坏行为.用例是用户可能有合法需要删除特定记录,但实际上从数据库中删除该行会破坏影响其他相关模型的参照完整性.例如,系统的用户可能想要删除与他们不再开展业务的客户,但需要维护与该客户的交易.
看来我至少有两个选择:
我错过了一个更好的方法吗?
选项1对我来说似乎是一个可怕的想法,尽管我喜欢听到相反的论点.
选项2似乎有些Rails-ish但我想知道处理它的最佳方法.我应该创建自己的继承自ActiveRecord :: Base的父类,重写那里的destroy方法,然后从我想要这种行为的模型中继承该类吗?我是否还应该覆盖查找器行为,因此默认情况下不会返回标记为已删除的记录?
如果我这样做,我将如何处理动态查找器?命名范围怎么样?
我试图弄清楚将多属性搜索表单逻辑放在Rails应用程序中的"最佳"位置.所讨论的搜索表单具有若干属性,这些属性可能具有或不具有值,并且数据类型在属性之间不同.(例如,有搜索选项来搜索具有两个数字,日期范围,字符串值等之间的价格属性的项目.)此外,所讨论的模型通过has_a/has_many关系具有多个嵌套属性,并且其中一些属性也是需要搜索.
厚模型的Rails口头禅,瘦控制器让我对尝试将搜索逻辑聚合到控制器中犹豫不决.但是,在模型中放置与构建搜索条件相关的逻辑似乎也不合适.最后,本着DRY的精神,我对将一堆特定的属性名称硬编码到某个模块中犹豫不决,因为我需要将类似的搜索逻辑应用于几个不相关的模型.也许搜索视图中表单字段的命名约定可用于构建正确的条件?(比如使用"min_","max_","startdate_"等前缀表示数据类型和搜索条件运算符,后缀是模型和/或属性的名称?)
我已经搜索了这方面的建议,但大多数建议似乎不灵活(硬编码属性名称,不支持嵌套属性)或使用基于路由的搜索,我认为这不会适合我的需要(其中5-10参数可以一次用于搜索).
有关"Rails方式"的任何建议吗?
我有一种情况,我需要在ExpressJS应用程序中使用相同的响应对象进行多次渲染.(基本上一个HTTP请求会触发多个后端请求,所有这些请求都可以在完成后立即开始将结果呈现给页面.)问题是我需要每个请求呈现一个视图(即我不认为我可以使用res.write()
),据我所知,res.render()
每次调用时都没有办法不结束响应或写标题.
我错过了什么?
我是node.js的新手所以请原谅我对一个简单问题的无知.我正在为一个node.js应用程序添加依赖关系到package.json,我想知道是否可以指定通常传递给npm install的命令行参数.例如,从命令行安装mongodb软件包时,可能需要传递一个选项:
npm install mongodb --mongodb:native
Run Code Online (Sandbox Code Playgroud)
他们使用package.json语法来指定应该使用命令行选项安装包吗?