小编And*_*vey的帖子

如何在同一视图中呈现两个分页和可共享的集合?

在Rails 3.2索引视图中,我呈现两个部分.

<%= render :partial => 'users/user', :locals => {:users => @happy_users} %>
<%= render :partial => 'users/user', :locals => {:users => @sad_users} %>
Run Code Online (Sandbox Code Playgroud)

在部分

<% users.each do |user| %>
  Show some fields
<% end %>
<%= will_paginate users %>
Run Code Online (Sandbox Code Playgroud)

分页不起作用.

如果我改变will_paginate采取实例变量,分页工作(但错误的集合)

<%= will_paginate @users %>
Run Code Online (Sandbox Code Playgroud)

当调用partial时,如何将locals传递给will_paginate?

(我意识到我还需要传递:param_name以使用两个集合.现在我只是想让一个实例工作.)

部分通过index.js.erb呈现

$(".ajaxable-users").html('<%= escape_javascript(render("users/user")) %>');
Run Code Online (Sandbox Code Playgroud)

控制器看起来像

def index
  @users = User.scoped.paginate(:page => params[:page], :per_page => 5)
  @happy_users = User.happy_scope.paginate(:page => params[:page], :per_page => 5)  
  @sad_users = User.happy_scope.paginate(:page => params[:page], …
Run Code Online (Sandbox Code Playgroud)

ajax ruby-on-rails will-paginate

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

如何在Rails中root用户当前用户的show视图?

如何在Rails应用程序中根据当前用户的节目视图?

我想做点什么

authenticated :user do
    root :to => "users#show"
end
Run Code Online (Sandbox Code Playgroud)

但是如何将当前用户的ID传递给此?

谢谢

ruby-on-rails

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

如何配置Rails路由以适应i18n

我正在向Rails应用程序添加国际化,并且或多或少地遵循相关的Rails指南Railscast.

我遇到了两个问题:

  1. 如何添加重定向到当前区域设置的"主页"链接.目前我有root_path链接,但由于routes.rb中的行设计用于获取未作用域的根,因此这些链接失败.这意味着root_path始终指向默认语言环境,而不是当前语言环境.
  2. 我已经在本地设置和工作(除了上面的问题),但部署到Heroku所有网址似乎都在我的路由文件中丢失并被其中一个捕获所有人抓住.它们在defulat语言环境下重定向到'/'.

我的设置如下

application_controller.rb

before_filter :set_locale
def default_url_options(options = {})
  {locale: I18n.locale}
end

private
def set_locale
  I18n.locale = params[:locale] if params[:locale].present?
end
Run Code Online (Sandbox Code Playgroud)

的routes.rb

scope ":locale", locale: /#{I18n.available_locales.join("|")}/  do
  all_my_routes

  # handles /valid-locale
  root to: 'home#index', as: "localized_root"
  # handles /valid-locale/fake-path
  match '*path', to: redirect { |params, request| "/#{params[:locale]}" }
end

# handles /
root to: redirect("/#{I18n.default_locale}")

# handles /bad-locale|anything/valid-path
match '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")

# handles /anything|valid-path-but-no-locale
match '/*path', to: redirect("/#{I18n.default_locale}/%{path}")
Run Code Online (Sandbox Code Playgroud)

我的主页链接:

<%= link_to "Home", …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails internationalization

7
推荐指数
3
解决办法
6665
查看次数

为什么Rails没有写入development.log

突然,我的Rails 4.2应用程序没有向development.log写任何内容.

绝对没有!

我已经尝试检查正在使用的正确环境,重新启动服务器,检查可能与记录器交互的gems,检查权限logger.flush,等等rake log:clean.

日志文件现在完全为空,并且没有写入任何内容.

跑步rails s给出:

=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2015-03-14 18:49:57] INFO  WEBrick 1.3.1
[2015-03-14 18:49:57] INFO  ruby 2.1.5 (2014-11-13) [x86_64-darwin14.0]
[2015-03-14 18:49:57] INFO  WEBrick::HTTPServer#start: pid=3963 port=3000
Run Code Online (Sandbox Code Playgroud)

Stackoverflow上有很多类似的问题,但没有一个提供我的案例中有效的答案.

我不知道是什么导致这个或如何系统地调试.

我应该采取什么措施?

logging ruby-on-rails

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

如何在需要重定向到外部域时防止Brakeman'不受保护的重定向'警告?

Rails应用程序中的模型有一个url列,用户可以在其中输入外部站点的地址.

网址显示在页面上.点击后,除了路由到该网址外,我还需要在应用中执行一些操作.所以我定义了一个控制器动作如下

#objects_controller.rb

def click
  @object = Object.find params[:id]
  # do some stuff
  respond_to do |format|
    format.html { redirect_to @object.url }
  end
end
Run Code Online (Sandbox Code Playgroud)

并在视图中

<%= 'click me', click_object_path @object %>
Run Code Online (Sandbox Code Playgroud)

Brakeman(正如预期的那样)发出警告

High - Redirect - Possible unprotected redirect
Run Code Online (Sandbox Code Playgroud)

通常,解决方案是添加only_path: true到重定向并仅允许当前应用程序中的重定向.但在这种情况下,所需的行为是导航到外部站点.

我的问题

  1. 我是否应该采取任何措施来确保无法从Object.url列输入和激活恶意代码(换句话说,我的点击控制器操作是归档所需的应用内操作和导航的最佳方式)?
  2. 如果这是正确的方法,有没有办法让Brakeman安静下来,以便不再报告这个特殊问题?

redirect ruby-on-rails brakeman

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

为什么Devise + Omniauth回调没有击中正确的控制器?

任何人都可以帮我解决这个问题的根源吗?

我在Rails 3.2应用程序中使用Devise + Omniauth.我想知道的是,用Devise的user_omniauth_authorize_path(provider)方法在幕后发生了什么.

我已经通过rake路线和宝石的来源进行了挖掘,但是我看不到任何明显的东西会导致我遇到的问题.

我假设这个方法只是调用提供者的登录URL(例如Twitter),然后返回到routes.rb中定义的回调路径.

在我的routes.rb我有

devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks'}

devise_scope :user do
    get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
Run Code Online (Sandbox Code Playgroud)

在users/omniauth_callbacks_controller.rb我有

def twitter
    render :text => "This works" 
end

def passthru
    render :text => "This doesn't work"
end
Run Code Online (Sandbox Code Playgroud)

在我看来<%= link_to "Twitter", user_omniauth_authorize_path(:twitter) %>.点击此链接转到我可以登录的Twitter,但在返回我的应用程序后,我收到错误"您已登录".

我无法弄清楚如何或为什么生成此错误.我应该只看到"这个有效"或"这不起作用".

我也有一个Facebook提供商以完全相同的方式设置,这可以按预期工作.

如果我替换Devise的omniauth链接,<a href="/users/auth/twitter">Twitter</a>那么我得到"This works".

所以这解决了我的问题,但它并不理想,我想知道为什么.

谁能摆脱任何光明?

编辑

Rake路线如下所示:

user_omniauth_callback        /users/auth/:action/callback(.:format)                       users/omniauth_callbacks#(?-mix:twitter|facebook)
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise omniauth

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

如何在 Heroku 上使用 postgres 扩展?以及如何处理他们的迁移?

我有一个包含 pg_search 和 queue_classic gems 的 Rails 应用程序。这两个都使用 PostgreSQL 扩展,例如 unaccent、pg_trgm 和 ps-something-something(抱歉,不是我的开发机器,不记得了)。

我正在部署到 Heroku,并且无法运行执行这些扩展的迁移

例如,

def up
  execute "create extension unaccent"
  execute "create extension pg_trgm"
end
Run Code Online (Sandbox Code Playgroud)

我的印象是 Heroku 从这里支持这些https://devcenter.heroku.com/articles/full-text-search以及 Heroku 使用 queue_classic https://github.com/ryandotsmith/queue_classic的事实。

我一直找不到任何信息来解释如何在 Heroku 上使用这些 postgres 扩展。或者即使它们可用于共享数据库或仅专用。

所以我的问题:

  1. 如何在 Heroku 上为我的应用程序提供这些扩展?
  2. 我如何处理迁移以便这些扩展可用于开发和测试环境,但如果 Heroku 限制这种类型的执行,则不要在暂存、生产或环境中中断迁移。

真的很感激任何想法,尤其是那些附有相关信息/说明指示的想法。

谢谢

ruby-on-rails heroku pg-search

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

为什么javascript无法部署到heroku?

在将Rails应用程序部署到Heroku之后,没有任何javascript函数正在运行.

这些文件似乎已被编译(虽然在缩小的文件中不容易看到).

什么是步骤来解决javascript无法正常工作的逻辑过程(它在生产中工作正常).

谢谢

ruby-on-rails heroku

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

什么是调试间歇性失败规范的系统方法?

我的Capybara/Rspec套件中有四个测试失败(CI部署的真正问题).

最糟糕的是,这些测试间歇性地失败,并且通常仅在整个套件运行时才会进行调试.

它们都是ajax请求,要么提交远程表单,要么单击远程链接,然后是expect(page).to have_content 'My Flash Message'.

这些测试甚至在同一测试周期内间歇性地失败.例如,我有几个表现相似的模型,所以我正在迭代它们进行测试.

e.g., 
['Country', 'State', 'City'].each do |object|
  let(:target) { create object.to_sym }
  it 'runs my frustrating test' do 
  end
end
Run Code Online (Sandbox Code Playgroud)

有时国家失败,有时国家,有时一切都过去了.

我已经尝试添加wait: 30到expect语句中.我sleep 30在expect语句之前尝试过添加.我还在接受间歇性传球.

有很多信息描述了挑剔的ajax测试,但我还没有找到很多关于如何调试和修复这些问题的信息.

在我拔掉头发之前,我真的很感激任何人的建议或指点!

UPDATE

谢谢你们所有这些出色的回应.看到其他人已经解决了类似的问题并且我并不孤单,这很有用.

那么,有解决方案吗?

使用调试工具的建议如pry,byebug,Poltergeist的调试功能(感谢@ Jay-Ar Polidario,@ TomWalpole)有助于确认我认为我已经知道的东西 - 即,@ BM5K建议的那些功能是有效的一直在浏览器中,错误在于测试.

我尝试调整超时和重试(@ Jay-Ar Polidario,@ BM5K),虽然这些改进仍然不是一致的修复.更重要的是,这种方法感觉就像修补孔而不是正确的修复,所以我并不完全舒服.

最后,我对这些测试进行了重大改写.这需要分解多步功能,并单独设置和测试每个步骤.虽然纯粹主义者可能声称这不是从用户的角度进行真正的测试,但每次测试之间都有足够的重叠,我对结果感到满意.

在完成这个过程时,我注意到所有这些错误都与"点击事物或填写表格"有关,正如@BoraMa建议的那样.虽然在这种情况下经验被颠倒了 - 我们采用了.trigger('click')语法,因为capybara + poltergeist报告使用click_linkor 点击元素时出错find(object).click,而且这些测试都是有问题的.

为了避免这些问题,我尽可能地从测试中删除了JS.即,在没有启用JS的情况下测试大部分功能,然后创建非常短的,有针对性的JS规范来测试特定的JS响应,功能或用户反馈.

所以没有一个单独的修复.一种重要的重构,说实话,可能需要发生并且是一项有价值的练习.通过将所有内容分解为单独的测试,测试已经失去了一些功能,但总体而言,这使得测试更容易阅读和维护.

仍有一些测试偶尔显示为红色,需要更多工作.但整体上有很大改进.

感谢大家的指导,并向我保证测试环境中的交互可能是根本原因.

ajax rspec ruby-on-rails capybara

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

为什么 Rubocop 提出“解析器/当前识别符合 2.5.5 的语法,但您正在运行 2.5.3”?

在 Rails 应用程序中,我开始在日志和测试输出中看到以下内容。

warning: parser/current is loading parser/ruby25, which recognizes
warning: 2.5.5-compliant syntax, but you are running 2.5.3.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
Run Code Online (Sandbox Code Playgroud)

这是来自Rubocop。

我知道 Rubocop 检查应用程序根目录中是否存在 .ruby-version 文件并使用它指定的 Ruby 版本。https://rubocop.readthedocs.io/en/latest/configuration/#setting-the-target-ruby-version

Rails 应用程序包含这样一个文件

/.ruby-version
ruby-2.5.3
Run Code Online (Sandbox Code Playgroud)

为什么 Rubocop 会针对错误的 Ruby 版本运行检查?

ruby-on-rails rubocop

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