小编Bac*_*cko的帖子

如何生成一个传递一些自定义参数的`link_to`网址?

我正在使用Ruby on Rails 3.0.9,我想生成一个link_to传递一些自定义参数的URL.也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:

link_to 'Sample link title', ... # Here I should implement the code
# => 'http://www.my_web_site_name.com/articles?param1=value1&param2=value2&...
Run Code Online (Sandbox Code Playgroud)

link_to为了实现这一目标,我如何编写"aàRubonon Rails Way"语句?如果我想通过传递一些自定义参数来'link_to''article_path(@article)'怎么办?

在某些地方,我已经看到使用类似的东西,link_to 'Sample link title', :param1 => 'value1', :param2 => 'value2'但在这种情况下,它不涉及命名路由(生成的URL指的是当前路径).

ruby parameters ruby-on-rails link-to ruby-on-rails-3

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

Rspec和'before_validation'回调问题

我使用on Rails的3.0.9和RSpec 2.我知道有使用RSpec的和一些已知问题Ruby的before_validation回调,因为before_validation似乎并没有被触发在规范文件中运行时.您可以找到许多类似的问题(例如,通过Google搜索).

我想知道,在这个时候,是否有人提出了解决这个问题的方法?

PS:我读过有些人建议使用模拟,其他人可以从一个before_validation回调切换到另一个回调(例如:到a before_save)或使用该save(:validate => false)方法(以便跳过验证)......等等......但似乎没有人解决"真正的"问题.在这种情况下,您认为应该怎么做才能解决问题?

ruby validation rspec ruby-on-rails ruby-on-rails-3

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

是否可以使用"类型"一词命名数据库表列而不会产生问题?

我正在使用Ruby on Rails 3.1.0,我想知道是否可以使用单词命名数据库表列type而不会产生问题(我知道在" 多态关联 "中使用了"类型"字...) .是吗?

如果我想使用,例如,数据库表名称article_type,我可以有什么样的问题(不使用多态关联)?

ruby naming ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

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

如何在不删除`test`数据库数据的情况下测试JavaScripts?

我使用Ruby on Rails 3.2.2,cucumber-rails-1.3.0,rspec-rails-2.8.1和capybara-1.1.2.我想使用Selenium来测试JavaScripts,但是test每次cucumber在终端窗口中运行命令行时都不要删除数据库数据.也就是说,如果我声明如下的功能:

Feature: ...

  @javascript
  Scenario: ...
Run Code Online (Sandbox Code Playgroud)

JavaScript也经过了预期的测试.但是,在测试运行后,test数据库数据将被删除,我必须再次播种该数据库才能正确运行新测试.

我阅读了官方文档文件中的文本ROOT_APP/features/support/env.rb(似乎我安装了所有必需的Ruby宝石 - 请参阅下面有关我正在使用的Gemfile的更多信息)但我不明白如何避免删除数据库数据以及如何配置Cucumber和Capybara宝石以便与Selenium合作.

我该怎么办?

注意I:我想做出上述内容,因为 我想test在"测试"/"运行"场景时拥有相同的数据库数据.

注意二:为了在test数据库中播种数据(我的应用程序需要该数据工作),我在RAILS_ROOT_PATH/lib/tasks/cucumber.rake文件中添加以下代码,并rake db:test:prepare从终端窗口运行命令行.

namespace :db do
  namespace :test do
    task :prepare => :environment do
      Rake::Task["db:seed"].invoke
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

ROOT_APP/features/support/env.rb文件中,我试图取消注释以下两个代码块(BTW:我从未更改过cucumber-railsgem 自动生成的原始文件,因此它是默认的),但在运行测试后仍会删除test数据库数据.

#   Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
#     # { :except => [:widgets] } may not …
Run Code Online (Sandbox Code Playgroud)

ruby selenium ruby-on-rails cucumber capybara

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

如何使用“exec_insert”方法?

我正在使用 Ruby on Rails 3.2.2 并且运行以下原始 SQL:

sql = "INSERT INTO articles (`title`, `user_id`) VALUES #{inserts.join(", ")}"
ActiveRecord::Base.connection.execute(sql)
Run Code Online (Sandbox Code Playgroud)

但是,我想使用 Ruby on Railsexec_insert方法,但没有关于此的良好文档。那么,我如何使用该exec_insert方法来制作与上面所述相同的东西(也许使用类似的东西Article.connection.exec_insert(...))?

ruby mysql database ruby-on-rails ruby-on-rails-3

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

如何在两个不同的类中使用DRY范围方法?

我正在使用Ruby on Rails 3.2.2,我想通过"指定"/"过滤"这些关联对象上的属性值来检索/范围关联对象.也就是说,此时我正在使用以下代码:

class Article < ActiveRecord::Base
  def self.search_by_title(search)
    where('articles.title LIKE ?', "%#{search}%")
  end
end

class ArticleAssociation < ActiveRecord::Base
  def self.search_by_article_title(search)
    joins(:article).where('articles.title LIKE ?', "%#{search}%")
  end
end
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,该where('articles.title LIKE ?', "%#{search}%")子句重复了两次,因此我认为可以使用DRY原则对其进行改进:是否可以 Article.search_by_title 直接在 方法中使用ArticleAssociation.search_by_article_title 方法?


典型用例是:

  • ArticleAssociation.search_by_article_title("Sample string")
  • Article.search_by_title("Sample string")

ruby refactoring ruby-on-rails dry ruby-on-rails-3

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

使用`:has_many:through`记录关联处理复选框表单

我正在使用Ruby on Rails 3.0.7,我想在我的视图文件中使用复选框字段(即,对于新的和编辑表单)和:has_many :through记录关联.我看到这种事情很容易使用实施has_and_belongs_to_many纪录协会,但有可能使该工作伊斯利与第一次提到的关联?如果是这样,怎么办?

ruby checkbox field ruby-on-rails ruby-on-rails-3

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

仅从记录关联中检索"id"值

我正在使用Ruby on Rails 3.0.7并且我有一个" User :has_many Articles"记录关联,我以这种方式检索用户的文章:

@user.articles
# => [#<Article id: 1, title: "Title 1">, #<Article id: 2, title: "Title 2">, #<Article id: ..., title: "Title ...">]
Run Code Online (Sandbox Code Playgroud)

但是,对于我需要做的事情,我想id从该关联中仅检索文章的.顺便说一句:它应该是上述更高效的操作.

如何以"直接"的方式做到这一点?也就是说,有一个Ruby on Rails方法可以通过保持:has_many两个相关模型的关联语句不变来实现它吗?如果是这样,怎么样?

ruby ruby-on-rails associations ruby-on-rails-3

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

Rails 3.1:使用'respond_to ... format.js'而不使用'page'变量的新方法

我试图将Ruby on Rails更新到3.1版.我跟着升级到Rails 3.1截屏视频,除了声明之外,所有内容似乎都有效

format.js { render(:update) { |page| page.redirect_to @article } }
Run Code Online (Sandbox Code Playgroud)

在许多控制器中,我有如下代码:

def create
  ...

  respond_to do |format|
    format.js { render(:update) { |page| page.redirect_to @article } }
  end
end
Run Code Online (Sandbox Code Playgroud)

在上述所有情况下,当我尝试提交执行JS请求的相关表单时,我收到以下错误:

ActionView::MissingTemplate (Missing template articles/update, application/update with {:handlers=>[:erb, :builder, :coffee], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in:
  * "/<MY_PROJECT_PATH>/app/views"
):

app/controllers/articles_controller.rb:114:in `create'

Rendered /<...>/.rvm/gems/ruby-1.9.2-p136/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.3ms)
Run Code Online (Sandbox Code Playgroud)

我知道问题与RJS模板有关,因为它们在3.1版本中不再可用.因此,为了运行一些JavaScript代码,在我的控制器文件中,我可能\应该\可以插入一些JavaScript代码,如下例所示:

format.js { render :js => "alert('Hello Rails');" }
Run Code Online (Sandbox Code Playgroud)

BTW:... 但是,是否建议直接在控制器文件中使用JavaScript代码?

考虑到create控制器操作中的上述代码,我想@article在成功提交后将用户重定向到路径.我可以: …

javascript ruby ajax ruby-on-rails ruby-on-rails-3

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

如何使用 JavaScript 通过数据选择器在 HTML DOM 对象数组中查找元素?

我有一个 HTML DOM 对象数组:

\n\n
// Console output\n\n(3) [\xe2\x80\xa6]\n0: <div data-selector="5">\xe2\x80\x8b\n1: <div data-selector="9">\xe2\x80\x8b\n2: <div data-selector="2">\xe2\x80\x8b\n3: <div data-selector="6">\xe2\x80\x8b\n4: <div data-selector="13">\xe2\x80\x8b\nlength: 5\n<prototype>: Array []\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何使用 JavaScript 找到(并返回)等于data-selector9<div data-selector="9">\xe2\x80\x8b)的 HTML 对象?

\n

javascript arrays find selector

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