问题标题几乎总结了......我无法找到任何有用的资源来概述使用Phusion Passenger Standalone进行Rails应用程序部署的优缺点.它与运行Passenger Nginx或Passenger Apache相比如何?像.htaccess这样的东西会继续按预期工作吗?任何见解将不胜感激!
谢谢!
我是Rspec的新手并尝试为用户配置文件设置测试.个人资料belongs_to用户.
现在,我与通过用户模型工作的第三方站点进行了API集成,但该API链接的一些信息包含在Profile中,因此我在Profile上有一个"after_update"过滤器,告诉父用户保存,触发API的更新.
我正在尝试为此编写一个测试,我正在获得一个ActiveRecord :: AssociationTypeMismatch.原因是我正在使用模拟用户,但我正在尝试测试当Profile更新时它发送:保存到用户.此外,用户模型还有一个电子邮件确认过程以及在其创建过程中提供的API调用,因此实际创建用户只是为了测试它并不理想.
这是我的测试:
it "should save the parent user object after it is saved" do
user = double('user', :save => true )
profile = Profile.create( :first_name => 'John', :last_name => 'Doe' )
profile.user = user
user.should_receive(:save)
end
Run Code Online (Sandbox Code Playgroud)
因此,显然ActiveRecord错误是由于尝试将模拟用户与期望真实用户关联的配置文件相关联而引起的.
我的问题是,你如何在编写rails测试时避免这种问题?我想要做的测试就是确保Profile调用:保存它的父用户.有没有更聪明的方法来做到这一点,或者ActiveRecord错误的解决方法?
谢谢!
所以,我的应用程序有照片属于集合.我希望能够在页面上显示来自特定集合的13张照片.
我试过这个:
c = Collection.first
@photos = c.photos.offset(rand(c.photos.count)).limit(13)
Run Code Online (Sandbox Code Playgroud)
这有点工作.问题是,如果该系列没有超过13张照片,那么它不一定会返回13张照片.我需要专门准确地拍摄13张照片.
FWIW对于我的应用程序,集合只由admins/mods创建,因此我们可以强制执行任何集合不会少于13张照片.我需要的是能够开始一次超过13个随机选择照片.
我怎么能这样做?
所以,我有一个有两个型号的应用程序.Foo has_one Bar,Bar belongs_to Foo.
现在,要创建一个Foo,你必须要创建一个属于它的Bar,但它看起来像是一些漏洞,因为在我的生产应用程序中,我现在似乎有一个Foo以某种方式创建没有Bar,它导致500错误.
现在,问题出在这里:
我可以搜索:Bar.where(:foo=>nil)
就好了.但孤儿棒不是问题,这并没有告诉我我需要什么.
我需要找到一个Foo,其中Bar是零.但是数据库将关系存储在Bars表中,即BarsTable中包含foo_id,FoosTable中没有任何内容告诉我它缺少一个条形码.
当我使用时,Foo.find(#).bar
我会为一个虚假记录得到零,但我有很多记录.
那么,任何人都可以告诉我如何构建一个返回丢失它的Bar的一个Foo的查询吗?
谢谢!!
所以,我有一个Photo
可以在full_size
和下载的模型presentation_size
.当用户下载照片时,我会在照片full_downloads
和presentation_downloads
属性上对其进行跟踪.
这一切都很好.
有时我想知道有多少下载量.我有一个简单的方法,total_downloads
看起来像这样:
def total_downloads
self.full_downloads + self.presentation_downloads
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:我希望能够通过所有这三个(完整,演示,总下载)订购照片.前两个很容易,但是你如何通过两列的总和来做订单呢?请注意,这至少需要SQLite和PG兼容.
一个附带问题,将total_downloads
方法作为查询会更快,如果是这样,那么编写该方法的最佳方法是什么?我知道要总结你可以调用的类Photo.sum(...)
,但我不知道如何在一条记录中为两列做到这一点.
谢谢!
我收到以下错误:
Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Photos#edit
Showing .../app/views/photos/_form.html.haml where line #49 raised:
taxonomy/focus-building.jpg isn't precompiled
Extracted source (around line #49):
46: = focus.code
47: .tooltip
48: %span.name= focus.name
49: = image_tag("taxonomy/focus-#{focus.code.downcase.dehumanize}.jpg")
50: / Help Overlay
51: .help
52: %a.overlay{:href=>"#", :rel=>'#help-focus'} Learn more about focus
Run Code Online (Sandbox Code Playgroud)
此图像文件位于app/assets/images/taxonomy/focus-building.jpg
.我已经运行了rake assets:precompile RAILS_ENV=production
,但据我所知,图像没有被复制到public/assets
目录中.
奇怪的是,SCSS中引用的所有资产都image-url()
可以正常使用.为什么这个图像报告在被引用时没有被预编译image_tag
?
我想知道是否有人有使用Ransack与HABTM关系的经验.我的应用程序photos
与habtm关系terms
(术语就像标签).这是我正在经历的简化解释:
我有两张照片:照片1和照片2.他们有以下条款:
照片1:A,B,C
照片2:A,B,D
我构建了一个ransack表单,并在搜索表单中为所有术语创建了复选框,如下所示:
- terms.each do |t|
= check_box_tag 'q[terms_id_in][]', t.id
Run Code Online (Sandbox Code Playgroud)
如果我使用:q[terms_id_in][]
并且我检查"A,C"我的结果是照片1和照片2.我只想要照片1,因为我要求A和C,在这个查询中我不关心B或D但我想要A和C都存在于给定的结果中.
如果我使用q[terms_id_in_all][]
我的结果是零,因为两张照片都不包含A和C.或者,也许,因为每个连接只有一个术语,所以没有连接匹配A和C.无论如何,我只想要返回照片1.
如果我使用任何种类的q[terms_id_eq][]
我从来没有得到任何结果,所以我认为这不适用于这种情况.
因此,给定一个habtm连接,如何在忽略未给定值的同时搜索与给定值匹配的模型?
或者,对于任何不熟悉Ransack的rails/sql专家,你怎么可能去创建一个搜索表单,比如我正在描述一个带有habtm连接的模型?
更新:根据相关问题的答案,我现在已经构建了一个正确匹配它的Arel查询.不知何故,你应该能够使用Arel节点作为搜索者,或者像cdesrosiers所指出的那样,作为自定义谓词,但到目前为止我还没有得到这样的工作.
根据该答案,我设置了以下ransack初始化程序:
Ransack.configure do |config|
config.add_predicate 'has_terms',
:arel_predicate => 'in',
:formatter => proc {|term_ids| Photo.terms_subquery(term_ids)},
:validator => proc {|v| v.present?},
:compounds => true
end
Run Code Online (Sandbox Code Playgroud)
...然后在Photo上设置以下方法:
def self.terms_subquery(term_ids)
photos = Arel::Table.new(:photos)
terms = Arel::Table.new(:terms)
photos_terms = Arel::Table.new(:photos_terms)
photos[:id].in(
photos.project(photos[:id])
.join(photos_terms).on(photos[:id].eq(photos_terms[:photo_id]))
.join(terms).on(photos_terms[:term_id].eq(terms[:id]))
.where(terms[:id].in(term_ids))
.group(photos.columns)
.having(terms[:id].count.eq(term_ids.length))
).to_sql
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不起作用.在terms_subquery
生成正确的SQL时,结果Photo.search(:has_terms => …
我知道在javascript中,基元是通过值传递的,而对象是通过引用传递的。
我对创建某种解决方法感兴趣,该解决方法将使我能够获取对包含原始对象的对象属性的引用。例如,我希望能工作的是:
var someObject = {a: 1, b: 2};
var myRef = someObject.b;
myRef ++;
someObject.b #=> 3
Run Code Online (Sandbox Code Playgroud)
当然,这是行不通的。我知道您可以改为创建一个getter和setter函数,或使用一个对象来引用另一个对象,但是我真正想要的是一种变通方法,它允许我定义一个变量来作为对属性的引用。另一个对象,到目前为止,看来这是无法完成的。
因此,我的问题很简单:这是否可能?如果可以,怎么办?
我正在努力研究这里最不惊讶的原则......
假设您有一个接受两个对象的方法.该方法需要这些是对象实例,但在初始化类的位置,您可能只有引用ID.例如,这在Web服务中的路由器/控制器中很常见.设置可能如下所示:
post "/:foo_id/add_bar/:bar_id" do
AddFooToBar.call(...)
end
Run Code Online (Sandbox Code Playgroud)
有许多不同的方法可以解决这个问题.对我来说,最像'idomatic'的是这样的:
def AddFooToBar.call(foo:nil,foo_id:nil,bar:nil,bar_id:nil)
@foo = foo || Foo[foo_id]
@bar = bar || Bar[bar_id]
...
end
Run Code Online (Sandbox Code Playgroud)
然后,当您调用该方法时,您可以将其称为:
AddFooToBar.call(foo: a_foo, bar: a_bar)
AddFooToBar.call(foo_id: 1, bar_id: 2)
Run Code Online (Sandbox Code Playgroud)
这创建了一个非常清晰的界面,但实现有点冗长,特别是如果有超过2个对象且它们的名称长于foo
和bar
.
你可以用一个好的老式哈希代替......
def AddFooToBar.call(input={})
@foo = input[:foo] || Foo[ input[:foo_id] ]
@bar = input[:bar] || Bar[ input[:bar_id ]
end
Run Code Online (Sandbox Code Playgroud)
方法签名现在非常简单,但与使用关键字参数获得的方法相比,它失去了很多清晰度.
您可以只使用一个键,特别是如果需要两个输入:
def AddFooToBar.call(foo:,bar:)
@foo = foo.is_a?(Foo) ? foo : Foo[foo]
@bar = bar.is_a?(Bar) ? bar : Bar[bar]
end
Run Code Online (Sandbox Code Playgroud)
方法签名很简单,虽然使用您传递对象实例的相同参数名称只传递一个ID有点奇怪.方法定义中的查找也有点丑陋且不易阅读.
您可以决定不将其内化,并要求调用者在传递实例之前初始化实例.
post "/:foo_id/add_bar/:bar_id" do
foo = …
Run Code Online (Sandbox Code Playgroud) 我一直在谷歌搜索这个并且找不到答案,这让我觉得答案是否定的,但我想我会在这里问,以防有人确切知道.
Ruby是否有定义方法的钩子(即在模块或类上)?
如果没有,是否有人熟悉该main
对象的实现,以便知道Object
在顶层定义方法时它是如何复制的?
真的好奇这个.谢谢你的任何信息:)
activerecord ×3
ruby ×3
sql ×3
associations ×1
deployment ×1
find ×1
javascript ×1
limit ×1
mocking ×1
passenger ×1
random ×1
ransack ×1
reference ×1
rspec ×1
search ×1
sql-order-by ×1
variables ×1