Tag: ruby on rails 3

ruby-on-rails检查查询结果是否为空(Model.find)

我在rails上使用ruby并尝试检查查询是否返回值。 这是查询: @search = Customer.find_by_name($login_name) 如果查询找到结果,一切都很好,但我怎么能对空结果做出反应呢? 我试过了: if @search.empty? flash[:notice] = ‘Username nicht bekannt’ redirect_to :action => :login end 但我得到一个错误: undefined method `empty?’ for nil:NilClass 任何想法出了什么问题? 谢谢!!!

Rails has_many:通过条件和建立关联

我在构建一个has_many :through的关联时遇到了问题has_many :through条件。 我有这个型号: class Contact :group_contacts, :conditions => {:groups => {:published => true}} end 当我尝试从联系人实例化一个组时,会出现问题。 使用上面的语法,我收到一个错误: contact.groups.build => ActiveRecord::UnknownAttributeError: unknown attribute: groups 但是,当我使用以下语法时,它可以工作: has_many :groups, :through => :group_contacts, :conditions => [‘groups.published = ?’, true] contact.groups.build => # 我在这个问题中看到了对确切问题的引用。 据说将为此错误提交一张票(返回前3版本)。 我在rails 3.0.x上找不到任何东西。 我正在使用3.0.8。 有没有人发现这个问题? 进一步说明 : 我还发现,当我建立群组时,它实际上忽略了我在建立时的关联条件。 上面构建published => true的唯一原因是因为它是db中的默认值。 这似乎是一种回归,任何人都可以validation这一点吗?

Rails 3覆盖Devise会话控制器

我需要在登录过程中重写Devise会话控制器(Rails 3.0.9,Ruby 1.9.2,Devise 1.3.4),我试过这个没有任何影响 class SessionsController < Devise::SessionsController # GET /resource/sign_in def new resource = build_resource clean_up_passwords(resource) respond_with_navigational(resource, stub_options(resource)){ render_with_scope :new } end end 想法? 编辑如答案所示,我还需要改变路线。 另外,我还需要复制视图。 这里有更好的解释http://presentations.royvandewater.com/authentication-with-devise.html#8 我的自定义策略: devise.rb config.warden do |manager| manager.strategies.add(:custom_strategy) do def authenticate! … authenticate against 3rd party API… if res.body =~ /success/ u = User.find_or_initialize_by_email(params[:user][:email]) if u.new_record? u.save end success!(u) […]

子域中的Rails url助手 – 删除子域

我网站上的用户可以拥有子域名。 例如,他们的页面url是 name.example.com 登录用户可以在用户的​​显示页面上查看更多用户信息,我有一个使用以下代码生成的链接: user_url(@user, :subdomain => false) 此链接应生成以下URL(其中@user的ID为19) example.com/users/19 当我将鼠标hover在链接上时,一切看起来都很好(例如,在浏览器窗口的底部,Safari和FF都正确显示链接。) 问题是当我点击链接时,网站引发了404,url是: example.com/users/19 任何人都知道com和用户之间的斜线发生了什么,我该如何取回它? BTW,Rails 3.2和一切都在开发中。 这个问题只出现在生产中。

ActiveAdmin:如何覆盖索引控制器操作:nil的未定义方法`base’:NilClass

我正在尝试覆盖ActiveAdmin控制器的索引操作,以显示current_user的结果而不是所有结果。 controller do def index @user_tasks = UserTask.where(:user_id => current_user.id).page(params[:page]) end end 访问ActiveAdmin时,抛出exception: ActionView::Template::Error (undefined method `base’ for nil:NilClass): 1: render renderer_for(:index) 我正在使用rails 3.1和最新的ActiveAdmin版本。 gem “activeadmin”, :git => ‘https://github.com/gregbell/active_admin.git’ 。

Rails – 包括与动态条件的关联

考虑到学校模式和学生模型,学校与学生有很多关系: has_many :students, :conditions => proc { “year_id=#{send(:active_year_id)}” } 其中active_year_id是学校模型中定义的方法,我在调用时遇到“active_year_id未定义”的错误: School.where(:active => true).includes(:students) 当我这样做时,情况正常 School.where(:id => 10).students 只有当我尝试使用包含时才会出现错误。 这是正确的行为吗? 如果没有,我做错了什么,我该如何解决? 使用Rails 3.0.9,REE 1.8.7。

在浏览器中渲染模板并更改url字符串?

我有2个动作 – 编辑和更新。 “编辑”中的表单将值提交给“更新”操作。 当保存模型失败时,我渲染编辑teplate,用户看到错误,并且字段预先填充了之前填充的内容。 有一个巨大但对我来说 – 在用户浏览器中的URL面板中有/ user / update,即使(因为)我渲染了编辑模板。 我可以通过在更新操作中将一些参数传递给render方法来改变它吗? 我不希望用户看到除了编辑之外还有任何(更新)操作。 可能吗?

在rails中手动编辑schema.rb是否安全?

我遇到了一个问题,我在rails项目的两个分支上工作,每个项目都有一个迁移来添加一个列。 当时, rake db:migrate:reset导致出现问题,我完全依赖schema.rb来正确表示我的数据库状态。 有一次,我遇到了一个问题,即分支A添加的列进入了分支B的模式。由于migrate:reset不是一个选项,我使用手动编辑模式文件。 我提交了这个更改,它基本上删除了分支A中我不需要在分支B的schema.rb中的列。 在将分支A合并到主服务器之后出现了问题。 当我尝试将分支B重新命名为master时,我仍然在B中进行了提交,以删除模式文件中的列(现在已经变得相关,因为它在master中)。 Git没有看到这方面的冲突并自动合并它。 在我的rebase结束时,我发现我的模式与master中的模式不一致。 我的修复是再次编辑模式文件并手动将以前删除的列添加回模式文件。 我的问题是:这被认为是非传统的吗? 危险吗? 哈克? 现在它涉及一列但如果这涉及多列删除/添加(危险?)解决方案可能导致更多问题和db / schema.rb不一致。

Activeadmin阻止我的jQuery工作

我正在使用jquery拖放我的应用程序,它工作正常。 然后我添加了activeadmin,它停止了我的jquery工作。 我收到这个错误 $(“.draggable_article_image”).draggable is not a function 如果我从active_admin.js中删除此行 //= require active_admin/base 它又开始工作了。 有任何想法吗?

无法使用Devise批量分配受保护的属性以创建has_many嵌套模型

我已经看过RailsCast,另一个嵌套属性video,很多SOpost,并与此争吵了一段时间,但我仍然无法弄明白。 我希望它有点小。 我有两个模型, User (由Devise创建)和Locker (又名产品愿望清单),我正在尝试为User注册时创建一个Locker 。 我的登录表单有一个新的Locker名称字段(恰当地称为:name ),我试图分配给在新用户注册时创建的锁定器。 我所遇到的只有: WARNING: Can’t mass-assign protected attributes: locker 我已经在我的两个模型中尝试了accepts_nested_attributes和attr_accesible每个组合,但仍然attr_accesible 。 我可以从日志中看到它正在由Devise #create方法处理,我知道Devise不够聪明,无法创建我想要的模型:) 这是我的两个模型的相关部分: # user.rb class User :lockers # Model nesting access accepts_nested_attributes_for :lockers end 和 # locker.rb class Locker :lockups attr_accessible :name, :description end # lockers_controller.rb (create) @locker = current_user.lockers.build(params[:locker]) @locker.save 我假设我需要覆盖Devise的create方法以某种方式让它工作,但我对rails非常新,并且我已经习惯了黑盒子“神奇”的本质。 如果有人能帮助我,我会非常感激。 已经花了太多时间在这上面,因为它是:) 编辑:我意识到我在我的问题中省略了一些东西。 我的Locker模型有三个属性 […]