小编ale*_*enm的帖子

测试使用ActiveRecord的问题/模块

情景 我已经提到了一个叫做的问题Taggable.它是一个允许任何模型支持标记的模块.我已经包含了这种担忧/模块到像模特User,Location,Places,Projects.

我想为这个模块编写测试,但不知道从哪里开始.

问题
1.我可以对此Taggable问题进行隔离测试吗?
在下面的示例中,测试失败,因为测试正在寻找a dummy_class table.我假设它正在这样做因为has_many代码,Taggable因此它期望'DummyClass'是一个ActiveRecord对象.

# /app/models/concerns/taggable.rb
module Taggable
  extend ActiveSupport::Concern

  included do
    has_many :taggings, :as => :taggable, :dependent=> :destroy
    has_many :tags, :through => :taggings
  end

  def tag(name)
    name.strip!
    tag = Tag.find_or_create_by_name(name)
    self.taggings.find_or_create_by_tag_id(tag.id)
  end
end


# /test/models/concerns/taggable_test.rb
require 'test_helpers'

class DummyClass
end

describe Taggable do
  before do
    @dummy = DummyClass.new
    @dummy.extend(Taggable)
  end

  it …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing ruby-on-rails activesupport minitest

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

使用bundle exec可以解决这个问题吗?

这是我的 Gemfile

source :rubygems

gem 'rake', '0.9.2.2'
gem 'sinatra'
gem 'activerecord', '3.0.9'
gem 'pg', '~> 0.12.2'
gem 'logger'
gem 'nokogiri'

group :development, :test do
  gem 'rack-test'
  gem 'ruby-debug19'
  gem 'sqlite3'
end
Run Code Online (Sandbox Code Playgroud)

rake console在其他项目中运行,现在我收到此消息:

You have already activated activesupport 3.1.3, but your Gemfile requires activesupport 3.0.9. Using bundle exec may solve this.

我如何使用`bundle exec来解决这个问题?这是什么意思?

ruby gem rubygems sinatra bundler

12
推荐指数
3
解决办法
1万
查看次数

PostgreSQL和OS X Lion权限问题.bash_profile

设置:
我安装了OS X Lion 10.7.2(未升级)
我买了笔记本电脑(没有软件升级)
我安装了4.2版(4D199)

我的.bash_profile说如下:

export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"
export PATH="$HOME/.rbenv/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

当我输入'哪个psql'时,我得到:

/usr/bin/psql
Run Code Online (Sandbox Code Playgroud)

我已经阅读了关于在升级到OSX 10.7 Lion之后修复 postresql 修复Postgresql的这篇文章,在本文中它说你键入的时候which psql应该得到:

usr/local/bin/psql
Run Code Online (Sandbox Code Playgroud)

我没有得到它.我究竟做错了什么?


更新 - 为任何人

如果有人和我有相同的设置,请执行以下操作:阅读此链接https://plus.google.com/114301087219148980063/posts/VHmzi63jCJK我复制并粘贴了此人写的内容:

如果您已安装或升级到Lion,您可能会注意到它现在附带了部分PostgreSQL 9.0.4安装.用适当的胡子Unix数据库软件取代劣质MySQL无疑是一件好事,但你会很快注意到实际的PostgreSQL服务器丢失了,因为它是Lion的"服务器"版本的一部分而不包括在常规风格中.那么如何让你的PostgreSQL开发服务器恢复?

  1. 不要购买Lion Server http://itunes.apple.com/gb/app/os-x-lion-server/id444376097?mt=12.对于35英镑,这应该会让你获得PostgreSQL服务器部分的正式版本,以及很多其他你可能不需要的东西.保存现金和磁盘空间.

  2. 不要从EnterpriseDB http://www.enterprisedb.com/products-services-training/pgdownload 安装官方PostgreSQL Mac软件包.他们很高兴提供一个,但它目前不与Lion合作(小的用户创建问题 - 虽然有一个解决方法).

  3. 不要从源代码构建 http://cambhlumbulunk.blogspot.com/2011/07/os-x-lion-2-postgresql-as-default.html.这将有效,但是除非您特别小心,否则在/ usr/local中会出现与系统文件冲突的文件.

  4. brew install postgresql.是的,这与3.几乎相同,但结果可以在以后轻松删除或更新.另外,最后您将获得有关如何创建数据库并在登录时启动postgres的设置说明.自制软件http://mxcl.github.com/homebrew/也将帮助您设置环境,以便需要PostgreSQL标头和包含构建的东西(如psycopg2)可以找到它们而不会有任何混乱.

最后注意:
1.您必须先安装brew.
2.安装brew之后,您可以安装postgresql brew install postgresql
3.安装提供了EXCELLENT备注,用于创建初始数据库和启动/停止PostgresSQL for OS X Lion.保存注释并执行初始创建数据库
4.此时,您可以创建数据库.即psql -d stuff

在最长的时间里,我一直想知道为什么最初的OS X Lion PostgreSQL没有工作,而且归结为它缺少服务器版本.其他任何人都对此表示不满,我希望这篇参考资料有所帮助.

postgresql bash .bash-profile osx-lion

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

GROUP_BY 内的 Active Record LIMIT

场景 我有一个包含用户表的帖子的表。我希望能够获取所有帖子并按用户对它们进行分组,但我想设置每个用户 10 个的限制。

class Post < ActiveRecord::Base
    belongs_to :user
end

class User < ActiveRecord::Base
    has_many :posts
end

# I thought this might work but it just grabs the first 10 posts and groups them
Post.find(:all, :limit=>10).group_by(&:user)
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?我是否必须为此编写自定义 SQL 或者 Active Record 可以这样做吗?

sql sqlite activerecord group-by ruby-on-rails

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

Rails在我的视图中创建缩略图库

我目前有一个包含一些图像URL的数组.

@images = [ "http://site/images/01.jpg", "http://site/images/02.jpg" ]

共18张图片

我想采用这个数组并创建一个缩略图库,其中画廊在我的视图中是3列.HTML输出将是

<table>
<tr>
<td><img src="http://site/images/01.jpg"></td>
<td><img src="http://site/images/02.jpg"></td>
<td><img src="http://site/images/03.jpg"></td>
</tr>
<tr>
<td><img src="http://site/images/04.jpg"></td>
<td><img src="http://site/images/05.jpg"></td>
<td><img src="http://site/images/06.jpg"></td>
</tr>
</table>

当前的实现让我得到一个列表

<table>
<tr>
<% @images.each do | image | %>
<td><%= image_tag(image)%></td><br>
<% end %>
</tr>
</table>

将来我可能希望它是6列而不是3列.我正在寻找一种以干净灵活的方式做到这一点的方法.

我正在查看Ruby文档,我看到了这个 Class Range(rng.step方法) http://www.ruby-doc.org/core/classes/Range.html

不确定此Range类步骤方法是否可以解决问题,但它提供的示例很有趣.

有任何想法,我还在学习,也许我在想这个?

ruby views ruby-on-rails thumbnails gallery

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

ActiveRecord并使用reject方法

我有一个模型可以从特定城市获取所有游戏.当我得到那些游戏时,我想过滤它们,我想使用这个reject方法,但是我遇到了一个我想要理解的错误.

# STEP 1 - Model
class Matches < ActiveRecord::Base
  def self.total_losses(cities)
    reject{ |a| cities.include?(a.winner) }.count
  end
end

# STEP 2 - Controller
@games = Matches.find_matches_by("Toronto")
# GOOD! - Returns ActiveRecord::Relation

# STEP 3 - View
cities = ["Toronto", "NYC"]
@games.total_losses(cities)
# FAIL - undefined method reject for #<Class:0x00000101ee6360>

# STEP 3 - View
cities = ["Toronto", "NYC"]
@games.reject{ |a| cities.include?(a.winner) }.count
# PASSES - it returns a number.
Run Code Online (Sandbox Code Playgroud)

为什么reject在我的模型中失败但在我看来不是?

ruby activerecord enumeration ruby-on-rails-3

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

irb加载错误的ruby和gem路径,使用rbenv

我开始使用rbenv进行ruby版本管理,我发现irb没有加载正确的ruby版本和gem版本.这是详细信息.

irb Gem.path说:

`>> Gem.path  
 => ["/Users/Air/.gem/ruby/1.8", "/Library/Ruby/Gems/1.8", "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8"]`
Run Code Online (Sandbox Code Playgroud)

现在在irb如果我输入:puts $:

`>> puts $:  
/Library/Ruby/Site/1.8  
/Library/Ruby/Site/1.8/powerpc-darwin11.0  
/Library/Ruby/Site/1.8/universal-darwin11.0  
/Library/Ruby/Site  
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby/1.8 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby/1.8/universal-darwin11.0  
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/vendor_ruby  
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8  
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/powerpc-darwin11.0  
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin11.0`
Run Code Online (Sandbox Code Playgroud)

在shell中我输入:gem env

`RubyGems Environment:  
  - RUBYGEMS VERSION: 1.8.10  
  - RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-darwin11.0.1]  
  - INSTALLATION DIRECTORY: /Users/Air/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1  
  - RUBY EXECUTABLE: /Users/Air/.rbenv/versions/1.9.2-p290/bin/ruby  
  - EXECUTABLE DIRECTORY: /Users/Air/.rbenv/versions/1.9.2-p290/bin  
  - RUBYGEMS PLATFORMS:  
    - ruby  
    - x86_64-darwin-11  
  - GEM PATHS:  
     - /Users/Air/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1  
     - /Users/Air/.gem/ruby/1.9.1  
  - GEM CONFIGURATION:  
     - :update_sources => true  
     - :verbose => true  
     - …
Run Code Online (Sandbox Code Playgroud)

ruby gem rubygems irb rbenv

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

Swift Playground 中的 SwiftUI 预览大小看起来不正确

问题

我有这个基本的样板格式,可以在操场上尝试 Swiftui。预览实时视图始终是这个小矩形。我不知道这是 Swift Playgrounds 中的一个错误还是我错过了其他东西?(见图)

代码

import SwiftUI
import PlaygroundSupport

struct ContentView: View {
    var body: some View {
        Text("Hello World")
    }
}

PlaygroundPage.current.setLiveView(ContentView())

Run Code Online (Sandbox Code Playgroud)

截屏

在此输入图像描述

更新的代码/屏幕截图

有人建议我提供UIHostingController并设置preferredContentSize. 所以我尝试了一下,但没有改变。同样的问题。请参阅下面的屏幕截图。

import SwiftUI
import PlaygroundSupport

struct ContentView: View {
    var body: some View {
        Text("Hello World")
    }
}

let contentView = ContentView()
let hostingViewController = UIHostingController(rootView: contentView)
hostingViewController.preferredContentSize = CGSize(width: 700, height: 800)

PlaygroundPage.current.setLiveView(hostingViewController)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

xcode swift swiftui

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

RSpec脚手架控制器,了解给出的默认值

我正在通过一个rspec教程(peepcode教程).我生成了一些脚手架,我希望有人可以帮助解释如何重新编写描述以便为新手阅读更清楚一些.

describe "POST create" do

    describe "with valid params" do
      it "assigns a newly created weather as @weather" do
        Weather.stub(:new).with({'these' => 'params'}) { mock_weather(:save => true) }
        post :create, :weather => {'these' => 'params'}
        assigns(:weather).should be(mock_weather)
      end

end
Run Code Online (Sandbox Code Playgroud)

这行代码是我试图理解的这一行

Weather.stub(:new).with({'these' => 'params'}) { mock_weather(:save => true) }
Run Code Online (Sandbox Code Playgroud)

我从未见过将方法放在括号内.这究竟意味着什么?

{ mock_weather(:save => true) }
Run Code Online (Sandbox Code Playgroud)

rspec controllers scaffold

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

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

创建 Postgres 视图时出现错误:列“id”指定多次

设想:

我有这个 select 语句,将JOIN一堆表放在一起:

SELECT 
    e0.id, e0.name, e0.slug,
    e1.id, e1.edition, e1.url, e1.date, e1.event_id,
    v2.id, v2.title, v2.language, v2.description, v2.provider, v2.videoid, v2.image_url, v2.event_id, v2.edition_id,
    s3.id, s3.name, s3.twitter, s3.website
FROM 
    events AS e0 
LEFT OUTER JOIN 
    editions AS e1 ON e1.event_id = e0.id
LEFT OUTER JOIN 
    videos AS v2 ON v2.edition_id = e1.id
LEFT OUTER JOIN 
    videos_speakers AS v4 ON v4.video_id = v2.id
LEFT OUTER JOIN 
    speakers AS s3 ON v4.speaker_id = s3.id
ORDER BY 
    e1.date DESC;
Run Code Online (Sandbox Code Playgroud)

我想创建一个Postgres View。所以写出来是这样的: …

sql database postgresql join sql-view

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

will_paginate可以按日订购吗

场景:我有一个图片表,其中包含数百张照片。我目前正在使用“ will_paginate”对每页100张照片进行分页。我想继续使用'will_paginate',但是我希望分页能够按日进行。

我已经尝试通过使用以下方法,sort_by但是我认为它没有用。

@pics = Picture.paginate(:page => params[:page]).sort_by(&:created_at)

最终目标:
主页仅显示我今天的照片。
现在,如果我单击第2页,则仅显示昨天的照片。
现在,如果单击第3页,它将显示两天前拍摄的照片。

我想继续使用 will_paginate

ruby gem sinatra will-paginate ruby-on-rails-3

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