天道酬勤,学无止境

ruby-on-rails

Rails 4 + Rolify Gem:用户角色不会通过 UI 更新(Rails 4 + Rolify Gem: User roles aren't being updated via UI)

问题 我有一个编辑视图,允许我更新特定用户的角色。 然而,我已经包含了下面的代码,只是为了给你一个想法,当我取消选中页面上的框时,我的控制器中的 puts 语句正确地指出角色关联是错误的,并且可以在日志中进一步查看. 但是,稍后在日志中,您可以看到角色正在重新关联回“true”,我完全不知道为什么会这样! 如果未选中复选框,我希望从用户中删除这些角色。 用户/edit.html.erb: <fieldset> <%= form_for @user, :url => {action: "update"}, :html => { :class => 'user-role' } do |f| %> <h1 class="h1-heading">User Roles</h1> <p class="user-paragraph"> Check the boxes to grant different roles to <%= @user.first_name %> <%= @user.last_name %>:</p> <%= f.label(:admin) do %> <%= hidden_field_tag(:admin, 0) %> <%= check_box_tag(:admin, 1, @user.has_role?(:admin)) %> Administrator <% end

2021-09-21 19:32:05    分类:技术分享    ruby-on-rails   ruby-on-rails-4   rolify

Ruby on Rails:Cucumber:如何点击打开新窗口的链接?(Ruby on Rails: Cucumber: how do I follow a link that opens a new window?)

问题 我有一个在新窗口中打开的链接,我需要测试我的应用程序在该新窗口中的部分。 任何建议将不胜感激。 回答1 您能否验证链接的目标设置为_blank? 回答2 定义包含此代码的步骤: page.driver.browser.switch_to.window (page.driver.browser.window_handles.last) switch_to 是一个 selenium 命令,允许您切换到新窗口 window_handles 返回当前打开的窗口列表 回答3 我意识到这是一篇很老的帖子,但这里有一个使用 Capybara 和 Poltergeist 驱动程序的 Cucumber 步骤定义: And /^I follow "([^"]*)" to the new window$/ do |link| new_window = window_opened_by { click_link link } switch_to_window new_window end

2021-09-21 19:07:28    分类:技术分享    ruby-on-rails   cucumber

Rails 4、omniauth-facebook、rack-cors、Heroku 的 CORS 问题(CORS Issue with Rails 4, omniauth-facebook, rack-cors, Heroku)

问题 概括: 我有 CORS 问题。 我正在尝试从带有 Rails API 的 React 应用程序向 Facebook 进行身份验证。 我的应用程序在 localhost:8080 上运行,而我的 api 在 Heroku 上运行。 我能够登录到 facebook 并在回调时创建一个会话,但是 facebook 设置的 cookie 没有被 omniauth 接收。 我使用 omniauth-facebook 客户端身份验证。 我认为问题出在我的 rack-cors 配置中。 当我在 localhost:3000 上运行我的 api 时它可以工作。 早些时候,我收到了错误csrf-detected ,但是通过将provider_ignores_state: true添加到 omniauth 配置解决了这个问题。 后来发现cors调用传递cookie需要xhrFields: { withCredentials: true } 。 最终解决方案:最后,我通过使用域example.com将我的应用程序部署到 AWS 53 并在 Heroku 上为我的 api 创建 CNAMES 'api.example.com` 来解决此问题。 解决 CNAMES 需要一天时间。 您可以使用命令 host example.com和 host api.example.com在终端中测试您的设置。

2021-09-21 18:44:18    分类:技术分享    ruby-on-rails   heroku   cors   omniauth-facebook

Rails AR 记录包括“新”未保存记录(Rails AR record includes 'new' unsaved record)

问题 我有一个“文章”显示操作的视图。 文章有评论。 视图显示:a) 文章 b) 评论 c) 新评论表单 我的控制器是动作: def show @article = Article.find(params[:id]) @comments = @article.comments @comment = @comments.new end 该视图使用部分显示注释。 <%= render @comments %> 在循环@comments 时,我发现该列表还包含来自控制器操作的新记录。 我可以避免使用以下方法显示这一行: <% if !comment.new_record? %> ... <% end %> 我做错了还是这是预期的行为? 回答1 是的,这是预期的,因为您创建新Comment 。 在将它们呈现在视图中之前,您基本上是在@article.comments添加一个新的空Comment 。 您的解决方案是有道理的,但您也可以通过不将@article分配给控制器show操作中的新@comment来避免该问题。 所以,而不是@comment = @comments.new你会做@comment = Comment.new 。 然后,在@comment的表单中,您将为article_id添加一个字段。 <%= f.hidden_field :article_id, :value =>

2021-09-21 18:20:44    分类:技术分享    ruby-on-rails   activerecord

Rails 范围按日期范围过滤(Rails scope filter by date range)

问题 有很多问题与 Rails 日期范围问题有关,但我的问题稍微复杂一些。 我有两种模型:房子和预订。 一个房子有_许多预订。 一个 Booking 有两个日期格式的属性:check_in 和 check_out。 我想要实现的目标:给出一个有效的日期范围,显示在此范围内可用的所有房屋。 详细: 范围的开始日期不应在任何预订中。 范围的结束日期不应出现在任何预订中。 开始和结束之间不应有任何预订。 这可以使用 rails 范围完成吗? 更新: 我发现下面的代码可以检查重叠的范围日期间隔。 named_scope :overlapping, lambda { |interval| { :conditions => ["id <> ? AND (DATEDIFF(start_date, ?) * DATEDIFF(?, end_date)) >= 0", interval.id, interval.end_date, interval.start_date] }} 我怎样才能把它转移到我的问题上? 回答1 scope :overlapping, (lambda do |start_date, end_date| House.includes(:bookings).where("bookings.check_in < ? AND bookings.check_out > ?"

2021-09-21 18:12:09    分类:技术分享    ruby-on-rails   ruby   rails-activerecord

Javascript 包括不加载页面稍后(Javascript includes not loading for later in the page)

问题 我们有一个Rails应用程序,我们都包括内部的HTML头我们的应用程序相关application.js : //= require jquery //= require analytics // other stuff... 然后在单个页面上,我们在页面底部有一个用于analytics的脚本标签: <script> analytics.track('on that awesome page'); </script> 这通常工作正常,但偶尔我们会看到错误analytics is not defined ,最近一次是在 Chrome 43 上。因为所有内容都应该同步加载,这似乎应该是开箱即用的,但我将脚本更改为: <script> $(document).ready(function () { analytics.track('on that awesome page'); }); </script> 而现在每隔一段时间我们就会看到$ is not defined 。 我们没有看到来自同一 IP 的任何其他错误,否则我会怀疑application.js 。 任何其他想法为什么它可能会中断? 您可以在此处查看示例页面。 完整的application.js : // Polyfills //= require es5-shim/es5-shim //= require es5

2021-09-21 18:09:45    分类:技术分享    javascript   ruby-on-rails   analytics

如何在从 ERB 部分呈现的 ActiveAdmin 编辑表单中使用选项卡(How to use tabs in an ActiveAdmin edit form rendered from an ERB partial)

问题 由于一些技术原因,我不得不将 ActiveAdmin 编辑表单从我一直使用的更改为 ERB 部分。 表单非常庞大,我不得不将其拆分为标签。 尝试在 ERB 部分中使用<% tabs do %>添加选项卡时, rails server输出中出现以下错误: Completed 500 Internal Server Error in 209ms ActionView::Template::Error (undefined method `tabs' for #<#<Class:0x007fb1827cdbf8>:0x007fb181b16d60>): 1: <%= semantic_form_for [:admin, @consignment], builder: ActiveAdmin::FormBuilder, html: { enctype: 'multipart/form-data' } do |f| %> 2: <% f.semantic_errors *f.object.errors.keys %> 3: 4: <% tabs do %> 5: 6: <% tab 'Foo' do %> 7: app/views/admin/consignments/_form.erb:4:in `block in _app_views_admin_consignments_

2021-09-21 17:39:22    分类:技术分享    ruby-on-rails   ruby   ruby-on-rails-4   activeadmin   formtastic

邮件错误缺少模板(Mailer error missing template)

问题 你好, 当我尝试执行操作时,我遇到了ActionMailer问题: rake send_email 我收到一个错误: rake aborted! ActionView::MissingTemplate: Missing template user_mailer/mailer with "mailer". Searched in: * "user_mailer" 这是我的: 邮件程序/user_mailer.rb class UserMailer < ActionMailer::Base default from: "from@example.com" def mailer(user) @user = user mail(to: @user.email, subject: 'Test') end end 意见/user_mailer/mailer.html.erb <!DOCTYPE html> <html> <head> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> </head> <body> <p> Sample mail. </p> </body> </html> 意见/user_mailer/mailer.text.erb Sample mail. lib/tasks

2021-09-21 17:30:34    分类:技术分享    ruby-on-rails   ruby   ruby-on-rails-4   rake   actionmailer

Rails 链接到路径(Rails link_to path)

问题 我正在尝试在 Rails 4 中制作一个应用程序。 我有 3 个模型:Project、Project_Question、Project_Answer 这些协会是: 项目: has_many :project_questions 并接受项目问题的嵌套属性。 项目问题: belongs_to :project has_one :project_answer 并接受 Project Answers 的嵌套属性。 我的路线嵌套如下: resources :projects do resources :project_questions do resources :project_answers end end 在我的项目问题部分,我想要一个链接来回答这个问题。 我试过了: <%= link_to 'Answer this question', new_project_project_question_project_answer_path(:project_question_id => project_question.id) %> 我的路由文件中有一个具有该名称的路由,但我收到此错误消息: undefined local variable or method `project_question' for #<#<Class:0x0000010742b9d8>

2021-09-21 17:21:02    分类:技术分享    ruby-on-rails

使用 ActiveJob 时是否仍应仅传递对象 ID?(Should you still pass only the object id when using ActiveJob?)

问题 在 ActiveJob 中执行以下操作的优缺点是什么: 选项A: // Controller MyJob.perform_later(object.id) // my_job.rb def perform(object_id) object = Object.find(object_id) // do stuff end 选项 B: // Controller MyJob.perform_later(object) // my_job.rb def perform(object) // do stuff end 回答1 ActiveJob现在在幕后使用新的 Globalid 库来序列化/反序列化 ActiveRecord 实例,因此您现在可以传递ActiveRecord对象。 我个人更喜欢继续传递 ID,因为它使代码与其他组件更具有互操作性,并且它不会无限期地将我的代码绑定到特定的ActiveJob行为,但这更像是个人选择。

2021-09-21 17:01:06    分类:技术分享    ruby-on-rails   ruby-on-rails-4   rails-activejob