小编joe*_*lis的帖子

更改Rails路由中的id参数

使用Ruby on Rails 3的新路由系统,是否可以更改default:id参数

resources :users, :key => :username
Run Code Online (Sandbox Code Playgroud)

出来以下路线

/users/new
/users/:username
/users/:username/edit
...etc
Run Code Online (Sandbox Code Playgroud)

我问,因为虽然上面的例子很简单,但在我正在进行的当前项目中做真的很有帮助.

是否可以更改此参数,如果没有,是否有特定原因为什么不?

routing ruby-on-rails ruby-on-rails-3

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

RVM并自动切换gemsets

是否有可能让rvm知道在某个目录下导航时应该使用哪个gemset,就像你可以通过在该目录下导航git当前分支的信息一样?

我理解git是如何工作的,因为每个目录在根目录中都有自己的.git目录,但不知道是否可能,因为.rvm更像是用户范围的配置.或者答案是在每个目录中创建一个.rvm文件?

ruby rvm

26
推荐指数
3
解决办法
9845
查看次数

使用Rails和Mongoid的动态属性

我正在通过带有Rails(Rails 3 beta 3)的Mongoid Ruby gem学习MongoDB,我正试图想出一种基于另一个模型的字段在模型上创建动态属性的方法,我认为这是一种模式 - 少数据库将是一个不错的选择.

例如,我有模型:

class Account
  include Mongoid::Document

  field :name, :type => String
  field :token, :type => String
  field :info_needed, :type => Array

  embeds_many :members
end

class Member
  include Mongoid::Document

  embedded_in :account, :inverse_of => :members

end
Run Code Online (Sandbox Code Playgroud)

我希望获取Account模型的"info_needed"属性,并根据内部的内容在Member模型上创建动态属性.如果club.info_needed是["first_name","last_name"],我正在尝试创建一个将first_name和last_name属性保存到Member模型的表单.

但是,在练习时,我只是在尝试执行此操作时不断在成员模型上获得"undefined method first_name ="错误.我知道MongoDB可以处理每个记录的动态属性,但是如何在没有未定义的方法错误的情况下让Mongoid执行此操作?

ruby-on-rails dynamic-attributes mongodb mongoid

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

Ruby模块并扩展自我

在什么样的情况下代码:

module M
   extend self
   def greet
    puts "hello"
   end

end
Run Code Online (Sandbox Code Playgroud)

使用更有利于说:

module M
   def self.greet
    puts "hello"
   end
end
Run Code Online (Sandbox Code Playgroud)

在顶部,一个是扩展的实例方法,后者只是一个类方法,但在调用任一方法时,你必须使用M.greet,对吧?我很好奇是否有人可以说明何时使用一个代码而不是另一个代码.谢谢!

ruby module class-method instance-methods

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

Rails - 与集成测试和Capybara失去会话 - CSRF相关?

我正在使用Rails 3.1.0.rc4,我正在与capybara的新类似DSL和Rspec进行集成测试(使用Devise身份验证)

我遇到的问题是,当我运行集成测试时,来自capybara的机架测试驱动程序似乎完全失去了用户的登录会话,事实上,会话似乎完全清除了.

经过几天的调试,我完全失去了原因.逐行通过中间件堆栈,我相信我已经把问题排除在ActiveRecord::SessionStore导致这种情况发生的事情上.我在这里读到Rails会清除一个会话,如果它无法验证CSRF令牌,这让我相信我有一些配置错误,并且由于某种原因这个测试没有正确验证CSRF令牌.

这是我在/ initializers目录中的session_store.rb中的内容:

MyApp::Application.config.session_store :active_record_store
Run Code Online (Sandbox Code Playgroud)

有没有人知道铁轨中的CSRF保护有任何线索可能会发生这种情况?

此外,还有一些注意事项:

  • 我试图测试的东西实际上在浏览器本身内工作,只有这一个测试正在放弃会话
  • 在将操作URL提交到另一个服务器的表单后,会话似乎被删除.我正在使用VCR gem来捕获测试中对这个外部服务器的请求/响应,虽然我认为我已经将外部请求作为问题,但这可能与CSRF令牌没有进行身份验证直接相关,从而清理会话.
  • 涉及登录/使用会话的其他测试不会丢弃会话

任何人都可以给我任何关于这里究竟发生了什么的线索,以及为什么一个测试似乎随意地放弃了它的会话而对我失败了?我做了很多调试,并尝试了我能想到的一切.

rspec ruby-on-rails csrf devise capybara

14
推荐指数
3
解决办法
6541
查看次数

开始学习Rails源代码

我最近一直在使用Ruby on Rails进行许多项目,我认为看看Rails源代码并真正了解它在底层的运行方式会很有趣.我认为这将是一次很棒的学习经历,并且可能会增强我对Rails应用程序进行编码的方式.

有没有人有关于如何开始的任何提示?在Rails源中,应用程序何时开始执行?也许如果我从那里开始,我可以看到一切都是如何加载和一般的.

open-source ruby-on-rails

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

如何处理嵌套的api调用

我正在使用Facebook的Flux Dispatcher创建一个简单的CRUD应用程序来处理英语学习网站的帖子的创建和编辑.我目前正在处理一个看起来像这样的api:

/posts/:post_id
/posts/:post_id/sentences
/sentences/:sentence_id/words
/sentences/:sentence_id/grammars
Run Code Online (Sandbox Code Playgroud)

在应用程序的显示和编辑页面上,我希望能够在一个页面上显示给定帖子的所有信息以及所有句子和句子的单词和语法详细信息.

我遇到的问题是弄清楚如何启动收集所有这些数据所需的所有异步调用,然后将我需要的数据从所有存储组合成一个对象,我可以将其设置为我的顶级组件中的状态.我一直在尝试做的一个当前(可怕)的例子是:

顶级PostsShowView:

class PostsShow extends React.Component {
  componentWillMount() {
    // this id is populated by react-router when the app hits the /posts/:id route
    PostsActions.get({id: this.props.params.id});

    PostsStore.addChangeListener(this._handlePostsStoreChange);
    SentencesStore.addChangeListener(this._handleSentencesStoreChange);
    GrammarsStore.addChangeListener(this._handleGrammarsStoreChange);
    WordsStore.addChangeListener(this._handleWordsStoreChange);
  }

  componentWillUnmount() {
    PostsStore.removeChangeListener(this._handlePostsStoreChange);
    SentencesStore.removeChangeListener(this._handleSentencesStoreChange);
    GrammarsStore.removeChangeListener(this._handleGrammarsStoreChange);
    WordsStore.removeChangeListener(this._handleWordsStoreChange);
  }

  _handlePostsStoreChange() {
    let posts = PostsStore.getState().posts;
    let post = posts[this.props.params.id];

    this.setState({post: post});

    SentencesActions.fetch({postId: post.id});
  }

  _handleSentencesStoreChange() {
    let sentences = SentencesStore.getState().sentences;

    this.setState(function(state, sentences) {
      state.post.sentences = sentences;
    });

    sentences.forEach((sentence) => {
      GrammarsActions.fetch({sentenceId: sentence.id})
      WordsActions.fetch({sentenceId: sentence.id})
    }) …
Run Code Online (Sandbox Code Playgroud)

javascript flux reactjs

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

正则表达式匹配一组花括号之间的所有单词

对于我认识的大多数正则表达式专家来说这是一个简单的问题,但是我试图在一个句子中的某些花括号之间返回所有匹配词; 但Ruby只返回一个匹配,我无法弄清楚为什么.

我正在使用这个例句:

sentence = hello {name} is {thing}
Run Code Online (Sandbox Code Playgroud)

使用此正则表达式尝试返回"{name}"和"{thing}":

sentence[/\{(.*?)\}/]
Run Code Online (Sandbox Code Playgroud)

但是,Ruby只返回"{name}".任何人都可以解释为什么它不匹配这两个词?

ruby regex

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

在Rails中将记录转换为JSON时包含模型的虚拟属性

我正在尝试在Rails中将ActiveRecord模型转换为JSON,虽然to_json方法通常有效,但不包括模型的虚拟属性.Rails中是否有一种方法不仅列出模型的属性,还列出attr_accessor和attr_reader属性,以便在模型转换为JSON时所有可读属性都可用?

activerecord json ruby-on-rails

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

如何在javascript对象中调用方法

我刚刚学习如何最好地组织我的javascript代码,我对我写的这小段代码有一个疑问:

var reportsControllerIndex = {
    plotMapPoints: function(data) {
        //plots points
    },

    drawMap: function() {
        $.getJSON('/reports.json', function(data) {
            reportsControllerIndex.plotMapPoints(data);         
        });
    },

    run: function() {
        reportsControllerIndex.drawMap();
    }
};
Run Code Online (Sandbox Code Playgroud)

问题是关于从reportsControllerIndex对象中调用reportsControllerIndex的另一个函数.我首先尝试了以下运行函数的代码:

run: function() {
    this.drawMap();
}
Run Code Online (Sandbox Code Playgroud)

这很完美.但是,我很快发现这是为drawMap函数做的:

drawMap: function() {
    $.getJSON('/reports.json', function(data) {
        this.plotMapPoints(data);         
    });
}
Run Code Online (Sandbox Code Playgroud)

不起作用,因为"this"现在将引用getJSON调用的回调函数.

我的解决方案是将reportsControllerIndex放在我想要调用的所有方法的前面,但我很好奇:是否有一种更相对的方式来调用像这样的整体对象中的函数(就像你在一个类中所做的那样)标准的OO语言)?或者我现在被迫这样做,只是通过对象的名称调用方法?

javascript object anonymous-function

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