小编And*_*rew的帖子

Rails:为什么不能在where子句中将关联设置为nil?

我有照片属于收藏和用户.照片始终属于用户,但可能未分配给集合.

在我的控制器中,这完美地工作:

@collection_photos = Photo.where( :collection => @collection, :user => current_user )
Run Code Online (Sandbox Code Playgroud)

但是,这失败了......

@other_photos = Photo.where( :collection => nil, :user => current_user )
Run Code Online (Sandbox Code Playgroud)

......但这有效:

@other_photos = Photo.where( :collection_id => nil, :user => current_user )
Run Code Online (Sandbox Code Playgroud)

当集合设置为nil时,我收到以下错误消息:No attribute named 'collection' exists for table photos.

如果我传递一个对象,它知道collection_id从符号中搜索:collection,但如果我没有传递一个对象,它似乎并不知道该关联.

我理解正确吗?任何人都可以解释一下为什么:collection=>nil不起作用?

activerecord ruby-on-rails where ruby-on-rails-3

9
推荐指数
1
解决办法
1139
查看次数

Ruby:Nils在IF语句中

我正在使用的rails应用程序中有以下非常难看的ruby代码:

if params.present?
  if params[:search].present?
    if params[:search][:tags_name_in].present?
      ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

所有我想问的是是否已经定义了params [:search] [:tags_name_in],但因为params,params [:search]和params [:search] [:tags_name_in]可能都是零,如果我使用...

if params[:search][:tags_name_in].present?
Run Code Online (Sandbox Code Playgroud)

...如果没有参数或没有搜索参数,我会收到错误.

肯定有一个更好的方法来做到这一点......建议?

ruby hash null if-statement ruby-on-rails

9
推荐指数
2
解决办法
1802
查看次数

Rails:"新建或编辑"路径助手?

是否有一种简单直接的方法可以在视图中提供链接,以便在资源不存在时创建资源,如果存在,则编辑现有资源?

IE:

User has_one :profile
Run Code Online (Sandbox Code Playgroud)

目前我会做的事......

-if current_user.profile?
  = link_to 'Edit Profile', edit_profile_path(current_user.profile)
-else
  = link_to 'Create Profile', new_profile_path
Run Code Online (Sandbox Code Playgroud)

这是好的,如果这是唯一的方法,但我一直在试图看看是否有一个"Rails方式"来做类似的事情:

= link_to 'Manage Profile', new_or_edit_path(current_user.profile)
Run Code Online (Sandbox Code Playgroud)

有没有什么好干净的方法来做那样的事情?类似于视图的东西Model.find_or_create_by_attribute(....)

ruby-on-rails edit new-operator link-to ruby-on-rails-3

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

Rails:只加载一个属性而不是整个模型

可以说我有一个模型,Foo它很大并且有很多组件.对于给定的Ajax查询,我只对一个特定属性感兴趣bar,这是foos表中的一列.

有没有一种简单的方法可以加载该属性,而不用费心去检索记录的其余部分?例如,如果我想知道的是ID为#_ _的 Foo栏,我该如何检索?

sql activerecord ruby-on-rails ruby-on-rails-3

9
推荐指数
2
解决办法
5045
查看次数

Rails:仅限管理员维护模式

我想将我的应用程序置于维护模式,但仍然可以让管理员/版主登录并使用该网站.两个原因:

  1. 我在应用程序中进行了一些更改,这些更改最适合使用应用程序内界面而不是控制台.

  2. 版主无法访问控制台,但绝对可以帮助我们完成维护任务.

你会怎么建议这样做?我一直在尝试设置一个环境变量,ADMIN_MODE并在它是真的时更改所有权限,但这看起来非常狡猾和缓慢.

我正在使用CanCan和Devise,这是值得的,但我绝对乐于接受任何建议.

谢谢!

maintenance authorization ruby-on-rails ruby-on-rails-3

9
推荐指数
1
解决办法
2902
查看次数

Ruby块语法错误

可能重复:
Ruby块和未加括号的参数

我不确定我是否理解这种语法错误.我正在使用Carrierwave来管理Rails应用程序中的一些文件上传,我似乎错误地将一个块传递给其中一个方法.

以下是Carrierwave文档中的示例:

version :thumb do
  process :resize_to_fill => [200,200]
end
Run Code Online (Sandbox Code Playgroud)

这就是我的所作所为:

version :full   { process(:resize_to_limit => [960, 960]) }
version :half   { process(:resize_to_limit => [470, 470]) }
version :third  { process(:resize_to_limit => [306, 306]) }
version :fourth { process(:resize_to_limit => [176, 176]) }
Run Code Online (Sandbox Code Playgroud)

我得到以上不起作用syntax error, unexpected '}', expecting keyword_end.有趣的是,以下工作完美:

version :full   do process :resize_to_limit => [960, 960]; end
version :half   do process :resize_to_limit => [470, 470]; end
version :third  do process :resize_to_limit => [306, …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails block syntax-error carrierwave

9
推荐指数
1
解决办法
1289
查看次数

Rails:确保模型中的大写?

在Rails模型中,如果我有一个专有名称的字段,尽管用户可能有懒惰的输入,但是确保它们统一大写的最佳实践方法是什么?

IE让我们说模型是Contact和现场Name.无论用户输入什么,我希望单词大写,即模型会将以下输入转换为以下输出:

john doe -> John Doe
j doe -> J Doe
John doe -> John Doe
john doe jr -> John Doe Jr
Run Code Online (Sandbox Code Playgroud)

那么,你是创建一个before_save回调并使用正则表达式转换字段,还是创建某种验证或不同的东西?我非常欣赏答案,重点是理由,为什么你会这样或那样做,因为这是我最坚持的.

activerecord ruby-on-rails input capitalization

9
推荐指数
2
解决办法
6239
查看次数

AppDelegate和main.m之间的关系

好吧,我对obj-c + cocoa完全不熟悉,所以这可能是显而易见的,但这里有:

我一直在从命令行应用程序转向可可应用程序,学习如何在Xcode中使用objective-c.我不太了解的一件事是AppDelegate的作用以及它如何连接到main.m

看起来你可以将你的整个程序放在appdelegate中它运行正常,你甚至不需要main.m,但不是相反,如果你正在制作一个可可应用程序你必须至少有appdelegate.

我已经做了很多php web开发和命令行工具,所以我想我正在寻找的是程序首先执行的文件,旨在"控制"其余部分.

任何人都可以帮助我理解Cocoa程序中发生了什么,AppDelegate和main.m是如何相关的,以及该程序的流程应该是什么?

cocoa delegates objective-c

8
推荐指数
2
解决办法
2297
查看次数

Rails:验证foo的存在,除非bar =='baz'

我正在研究一个模型,该模型在创建对象时需要设置两个关联,在一种情况下除外.

基本上,它需要像这样工作.

class Example < ActiveRecord::Base
  has_one :foo
  has_one :bar

  validates_presence_of :foo
  validates_presence_of :bar, :unless => :foo == Foo.find_by_name('ThisFooDoesntLikeBars')
end
Run Code Online (Sandbox Code Playgroud)

我不确定如何构建:除非条件在这里,因为它需要检查:foo是否是特定对象.

你怎么做这样的事情?

validation activerecord ruby-on-rails ruby-on-rails-3

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

方法定义的Ruby钩子?

我一直在谷歌搜索这个并且找不到答案,这让我觉得答案是否定的,但我想我会在这里问,以防有人确切知道.

Ruby是否有定义方法的钩子(即在模块或类上)?

如果没有,是否有人熟悉该main对象的实现,以便知道Object在顶层定义方法时它是如何复制的?

真的好奇这个.谢谢你的任何信息:)

ruby

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