小编Joh*_*Del的帖子

控制器helper_method

我想知道为什么有人应该在控制器中使用helper_method创建一个辅助方法,而不是创建帮助文件内部的"正常"方式.那有什么优点和缺点?

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

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

注销后,如果我按下按钮,我可以看到需要登录的最后一页

我已经在我的Web应用程序中配置了设计.我有以下工作流程的问题:

要访问管理面板,我需要登录.之后,我正常导航到我的网络应用程序的管理面板.当我单击logout时,它会将我重定向到根页面,这是我想要的行为.

奇怪的是,在这个页面中开始,在上面的操作之后,我点击了浏览器的后退按钮,它显示了我的缓存的最后一页.我的会话已被破坏,因为如果我点击刷新它重定向我并提示登录访问该页面,但我不希望能够看到浏览器的最后一个历史页面.

这怎么可能,我该怎么做才能防止它呢?它与浏览器缓存有关吗?解决此问题的唯一方法是从登录页面中删除缓存以防止此行为?我怎样才能做到这一点?

ruby-on-rails browser-cache devise ruby-on-rails-3

30
推荐指数
2
解决办法
9652
查看次数

Rails 3路由 - 从routes.rb传递params

在rails 2.3.5中,您可以在routes.rb文件中执行以下操作:

map.root :controller => "pages", :action => "show", :id => 3
Run Code Online (Sandbox Code Playgroud)

在rails 3中,我没有找到任何方法来传递特定参数(例如在rails 2.3.5中使用:id => 3).

我知道我可以从控制器处理它并得到相同的结果(我做了),但我想知道是否有一种方法可以在routes.rb中的rails 3中执行相同的操作,或者因为它更好而改变了练习出于某种原因?

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

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

Rails - 设计,如何禁用某些默认路由?

我想完全禁用路由/ users/sign_in以获取和发布.

我能够使用以下方法成功覆盖它们:

  devise_for :users do
      get "/admin" => "devise/sessions#new", :as => :new_user_session
      post "/admin" => "devise/sessions#create", :as => :user_session
  end
Run Code Online (Sandbox Code Playgroud)

当我运行rake路线时,我看到以下内容:

    new_user_session GET    /admin(.:format)                {:controller=>"devise/sessions", :action=>"new"}
    user_session     POST   /admin(.:format)                {:controller=>"devise/sessions", :action=>"create"}
    new_user_session GET    /users/sign_in(.:format)        {:action=>"new", :controller=>"devise/sessions"}
                     POST   /users/sign_in(.:format)        {:action=>"create", :controller=>"devise/sessions"}
Run Code Online (Sandbox Code Playgroud)

我可以从/ admin以及/ users/sign_in访问登录.但我想完全删除最后两行,是否可能?

我从文档中尝试了一些不同的组合,但它也覆盖了一些有用的组合,如密码/新密码/编辑路由.

ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.1

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

Ruby:为什么Hash === {}会返回true?

我有一个哈希,让我们说:

ahash = {test1: "test1", test2: "test2"}
Run Code Online (Sandbox Code Playgroud)

为什么它Hash === ahash返回true,但ahash === Hash不是?这是一些带有===和类名的默认ruby行为吗?

ruby

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

使用两个外键确定范围

我有以下架构: 在此输入图像描述

我想要选择同时调用proposalsforeign_keys(author_ideditor_id)以及单独的(例如author_proposalseditor_proposals),我需要选择延迟或急切加载它们(例如User.includes(:proposals)或没有它joins).

更新:

#I have the scopes which is like this:
class User < ActiveRecord::Base
  has_many :author_proposals, class_name: 'Proposal', foreign_key: :author_id
  has_many :editor_proposals, class_name: 'Proposal', foreign_key: :editor_id
end

class Proposal < ActiveRecord::Base
  belongs_to :author, class_name: 'User', foreign_key: :author_id
  belongs_to :editor, class_name: 'User', foreign_key: :editor_id
end
Run Code Online (Sandbox Code Playgroud)

但我需要一个通用的一个,它会给我所有的提案(包括author_proposalseditor_proposals),这也将跃跃欲试加载它们.我应该使用条件has_many吗?

ruby activerecord ruby-on-rails rails-activerecord

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

为div创建线性透明渐变

我想为div创建一个线性透明渐变.有没有办法用jquery做到这一点?或者我应该使用像raphaeljs这样的其他库吗?我想达到如下效果:

替代文字

javascript css jquery opacity raphael

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

Sidekiq和rails 4 actionmailer永远不会发送电子邮件

我在rails 4应用程序中设置了sidekiq,用于发送电子邮件和处理后台作业.我还设计了我使用devise_async和典型的联系表单电子邮件.我正在使用Gmail发送电子邮件.

如果我删除sidekiq,它通常通过gmail(设计和联系表单)发送电子邮件,但是当我启用它时,它不起作用(devise_async既不是联系表单也不是).Sidekiq显示后台作业开始并成功完成(我也通过sinatra应用程序看到它们已被处理)但电子邮件从未发送过.

在开发过程中,控制台显示发送的电子邮件(使用devise_async和联系表单,因为它们已成功处理sidekiq).

我已经尝试过的:

  • 我为sidekiq的rails4添加了github分支(我也尝过了主人)
  • 我已经更新并检查redis版本是否大于2.4(它是2.6.14)
  • 我正在运行sidekiq bundle exec sidekiq

但没有任何效果.我使用的是ruby 2.0.0-p247.

我还在这个应用程序中使用sidekiq设置图像处理,并且在开发和生产中都能很好地工作.

我没有做任何花哨的事情,但我正在添加完成代码:

我的邮件代码:

  def send_message
   @message = Message.new(message_params)
   if @message.save
     ContactMailer.delay.contact_form(@message.id)
   end
 end
Run Code Online (Sandbox Code Playgroud)

我的邮件:

  def contact_form(message_id)
    message = Message.where(id: message_id).first
    @email = message.email
    @message = message.text
    mail(to: "myemail@gmail.com", subject: "Message from contact form")
  end
Run Code Online (Sandbox Code Playgroud)

和我的生产配置(它没有sidekiq工作):

  config.action_mailer.delivery_method = :smtp
  ActionMailer::Base.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :domain               => "gmail.com",
    :authentication       => "plain",
    :enable_starttls_auto => true,
    :user_name            => "myusername",
    :password             => "mypassword"
  }
  config.action_mailer.default_url_options = { :host …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails actionmailer sidekiq

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

Rails:为什么在调用`render'new'`时自定义url会改变?

我有一个控制器,用于控制联系页面上的联系我们表单.在routes.rb文件中我有一行说match '/contact', :to => 'feedback#new'.现在当表格填写正确时,一切正常; 网址是'/ contact'.但是,当表单未正确填写时,我的控制器renders 'new'和URL将更'/contact'改为'/feedback'.有人能告诉我为什么会发生这种情况以及我如何解决这个问题,以便如果验证被触发并且页面被渲染,那么网址是否/contact仍然存在/feedback?谢谢!

我的控制器代码: 在此输入图像描述

controller ruby-on-rails url-routing ruby-on-rails-3

11
推荐指数
1
解决办法
5702
查看次数

保护Web应用程序的WIFI

我创建了一个CORS Web应用程序(只有javascript),我希望在不同的LAN下安装和运行.

我想放置SSL,但我不知道局域网的确切配置是什么,可能每次都会有所不同.所以我认为我无法添加经过认证的SSL.SSL有其他可能的解决方案吗?由于警告,我不喜欢添加未经认证的SSL的方法.

我怎样才能加密包并对请求进行安全认证?我正在使用CouchDB默认CORS,但如果在开放的WIFI中安装并使用Web应用程序,则可以嗅探包.该应用程序仅使用javascript,我不知道如何保护它(唯一的后端是couchDB中的存储).

security ssl jquery couchdb wifi

11
推荐指数
1
解决办法
349
查看次数