小编Yul*_*ule的帖子

宝石中的Rails 3发电机

可能听起来像一个简单的问题,但我很难过.

我创建了一个基本上包含生成器的gem.

它包含以下结构:

lib
 - generators
    - my_generator
          my_generator_generator.rb (see below)
          - templates
             my_template_files...     
 - my_generator.rb (empty file)
test
 -test files
GemFile
etc..
Run Code Online (Sandbox Code Playgroud)

但是当我将这个Gem添加到我的gem文件并运行rails g时,它没有列出.我需要做任何其他配置吗?

我的发电机大致看起来像这样......

class MyGeneratorGenerator < Rails::Generators::NamedBase
      source_root File.expand_path('../templates', __FILE__)
      generator code....
 end
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它适用于Cygwin,但不适用于Ubuntu ......

rubygems ruby-on-rails generator ruby-on-rails-3

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

Rspec.config before(:each)除了特定的:types

我试图让一个before(:each)块运行所有规格除外 type: :feature.

我能让它工作的唯一方法是剪切和粘贴,并为每种类型分别配置块.(:type => :model,:type => :service等)

投机/ rails_helper.rb

# To speed up tests, stub all Paperclip saving and reading to/from S3
config.before(:each, :type => :model) do
  allow_any_instance_of(Paperclip::Attachment).to receive(:save).and_return(true)
end
Run Code Online (Sandbox Code Playgroud)

有更干的方法吗?

ruby rspec ruby-on-rails

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

克隆rails中的关系

我在升级到rails 4.2.1时遇到了弃用错误, Modifying already cached Relation. The cache will be reset. Use a cloned Relation to prevent this warning.

我正在尝试运行的操作获得已登录的月份用户数.

我的测试很简单:

get :page
expect(response).to be_success
Run Code Online (Sandbox Code Playgroud)

控制器动作:

def page
  @months = {}
  (0..11).each do |month|
     @months[month] = User.group(:usergroup).number_first_logged_in(Date.new(Date.today.year,month+1, 1))
  end
end
Run Code Online (Sandbox Code Playgroud)

用户模型

class Model < ActiveRecord::Base
   ...
   def number_first_logged_in(month)
     where(first_logged_in_at: month.beginning_of_month..month.end_of_month).count
   end
end
Run Code Online (Sandbox Code Playgroud)

我意识到我运行了几乎相同的查询12次,但参数不同.当用户未分组时,此方法在别处使用.如何按照弃用警告中的建议"克隆"关系?

我不想简单地忽略这一点,因为它在运行测试时填满了我的屏幕,这不是很有帮助

ruby-on-rails rails-activerecord rails-4-2-1 adequate-record

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

Rspec控制器具有相同名称的命名空间

我有以下设置:

class UsersController < ApplicationController
...
end

class Admin::BaseController < ApplicationController
...
end

class Admin::UsersController < Admin::BaseController
...
end
Run Code Online (Sandbox Code Playgroud)

同样的规格:

#spec/controllers/users_controller_spec.rb:

describe UsersController do
...
end

#spec/controllers/admin/users_controller_spec.rb
describe Admin::UsersController do
...
end
Run Code Online (Sandbox Code Playgroud)

所有规格在独立运行时运行良好,但是当我一起运行时,我收到警告:

toplevel constant UsersController referenced by Admin::UsersController
Run Code Online (Sandbox Code Playgroud)

管理员控制器的规格没有通过.

路线文件:

...
resources :users
namespace "admin" do
   resources :users
end
Run Code Online (Sandbox Code Playgroud)

...

Rails 4,Rspec 2.14

我可以不为不同命名空间中的控制器使用相同的名称吗?

rspec ruby-on-rails

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

如何从ruby中的IO对象获取文件名

在红宝石......

我有一个由外部进程创建的IO对象,我需要从中获取文件名.但是我似乎只能得到文件描述符(3),这对我来说不是很有用.

有没有办法从这个对象获取文件名甚至获取文件对象?

我从通知程序获取IO对象.所以这可能是一种获取文件路径的方法?

ruby io

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

创建一个 gem 服务器,我可以将 gems 发布到

我写了一些我已经使用 Gemcutter 和存储在 github 上的源代码发布到 ruby​​gems 的 gem。

我有一个问题,我需要创建一个不能开源的 gem,它也不能提供给社区,而只能提供给我的团队成员。

我知道我可以在本地存储宝石并将它们定位到我的 Gemfile 中,但是我希望能够做到

rake version:bump
rake release
Run Code Online (Sandbox Code Playgroud)

或类似。这会影响版本并将其推送到我的 gem 服务器,并且仍然保留旧的 gem,以便人们可以安装它的旧版本。

看起来它应该相当简单。我只是想念怎么做

version-control rubygems ruby-on-rails

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

转置sql结果,使一列进入多列

我正试图从一个表格中获取特定格式的调查数据.但是我的所有尝试似乎都是因为DB上的连接太多/太重而无法提交数据库.

我的数据如下:

id, user, question_id, answer_id, 
1,   1,   1,           1
3,   1,   3,           15
4,   2,   1,           2
5,   2,   2,           12
6,   2,   3,           20
Run Code Online (Sandbox Code Playgroud)

大约有250,000行,每个用户大约有30行.我希望结果看起来像:

user0, q1, q2,   q3 
1,     1,  NULL, 15
2,     2,  12,   20 
Run Code Online (Sandbox Code Playgroud)

这样每个用户在结果中都有一行,每个用户每个答案都有一个单独的列.

我正在使用Postgres,但任何SQL语言的答案都会受到赞赏,因为我可以翻译成Postgres.

编辑:我还需要能够处理不回答问题的用户,即上面的示例q2用户1.

sql postgresql crosstab

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

ASP.Net MVC 4 w/AttributeRouting和多个RoutePrefix属性

TL; DR

我需要一种方法来根据我的MVC应用程序中的用户属性,在生成URL时以编程方式选择选择哪个RoutePrefix

不是TL; DR

我有一个MVC 4应用程序(使用AttributeRouting NuGet包)

由于托管环境的要求,我必须为我的许多操作设置两条路由,以便托管环境可以具有不同的访问权限.

我通过装饰我的控制器来解决这个问题[RoutePrefix("full")] [RoutePrefix("lite)].允许通过/ full/{action}和/ lite/{action}访问每个操作方法.

这非常有效.

[RoutePrefix("full")]
[RoutePrefix("lite")]
public class ResultsController : BaseController
{
    // Can be accessed via /full/results/your-results and /lite/results/your-results and 
    [Route("results/your-results")]              
    public async Task<ActionResult> All()
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,每个用户只应在其URL中使用full或lite,这取决于该用户的某些属性.

显然,当我使用RedirectToAction()@Html.ActionLink()它只会选择第一个可用的路线,并不会保留"正确"的前缀.

我想我可以覆盖该RedirectToAction()方法以及添加我自己的@Html.ActionLink()方法版本.

这将有效,但它将涉及一些讨厌的代码,我生成URL,因为我得到的是一个表示动作和控制器的字符串,但不是反映的类型.也可能有路由属性,例如在我的示例中,所以我将不得不复制许多内置代码的MVC.

对于我想解决的问题,有没有更好的解决方案?

c# asp.net-mvc asp.net-mvc-4 attributerouting

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

github如何参与52周的工作?

我对我的github 52周参与图表感到困惑.我在那里的大多数项目只有一位作者(我).然而,52周参与的"由所有者提交"是零,即使我的所有提交都是由我提交的.

我的页面:https://github.com/yule

git commit github

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

Rails 4 - 带有accepts_nested_attributes_for控制器设置的嵌套表单?

我正在尝试使用form_for和制作嵌套表单fields_for.经过大量的研究和成功,不再在我的项目上工作了.我只是想重新创建一个railscast,看看我做错了什么.

我正在尝试重新创建在http://railscasts.com/episodes/196-nested-model-form-part-1上找到的示例,因为代码存在,所以不应该那么难,但我可以'设法从调查中创建问题.这是我的代码,直到现在:

rails new surveysays
rails g scaffold survey name:string
rake db:migrate
rails g scaffold question survey_id:integer content:text
rake db:migrate
Run Code Online (Sandbox Code Playgroud)

我正在尝试以完全相同的视频序列进行操作.我的问题模型:

class Question < ActiveRecord::Base
  belongs_to :survey
end
Run Code Online (Sandbox Code Playgroud)

我的调查模型:

class Survey < ActiveRecord::Base
  has_many :questions, dependent: :destroy
  accepts_nested_attributes_for :questions
end
Run Code Online (Sandbox Code Playgroud)

我的调查表格带有嵌套问题字段:

<%= form_for(@survey) do |f| %>
      ...
      <div class="field">
        <%= f.label :name %><br>
        <%= f.text_field :name %>
      </div>
      <%= f.fields_for :questions do |builder| %>
        <p>
          <%= builder.label :content, "Question" %><br/>
          <%= builder.text_area :content, :row …
Run Code Online (Sandbox Code Playgroud)

controller nested-forms nested-attributes ruby-on-rails-4

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

为什么Model.all与rails 3中的Model.where('true')不同

我有一个查询,工作正常:

ModelName.where('true')
Run Code Online (Sandbox Code Playgroud)

我可以将其与其他AR调用链接,例如where,order等.但是当我使用时:

ModelName.all
Run Code Online (Sandbox Code Playgroud)

我收到"相同"的响应,但不能链接到哪里或命令它,因为它是一个数组而不是一个AR集合.虽然我没有使用第一种方法的实用问题,但似乎有点难看/不必要.有没有一种更干净的方式可以这样做.to_active_record_collection或什么?

activerecord ruby-on-rails ruby-on-rails-3

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

rake db:migrate失败了

当我输入:sudo rake db:migrate

我有:

rake aborted !    

/home/trace/config/initializers/session_store.rb:3: syntax error,   unexpected ':', expecting $end...sion_store :cookie_store, key: '_trace_session'    
Run Code Online (Sandbox Code Playgroud)

请注意,我的ruby版本是:

 ruby -v: 1.9.2p312    
Run Code Online (Sandbox Code Playgroud)

而在我的bashrc我有:

rvm use 1.9.2-final@rails310.    
Run Code Online (Sandbox Code Playgroud)

session_store.rb:

# Be sure to restart your server when you modify this file.

Trace::Application.config.session_store :cookie_store, key: '_trace_session' 
Run Code Online (Sandbox Code Playgroud)

提前致谢

ruby rake ruby-on-rails rvm

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