我有照片属于收藏和用户.照片始终属于用户,但可能未分配给集合.
在我的控制器中,这完美地工作:
@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
不起作用?
我正在使用的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)
...如果没有参数或没有搜索参数,我会收到错误.
肯定有一个更好的方法来做到这一点......建议?
是否有一种简单直接的方法可以在视图中提供链接,以便在资源不存在时创建资源,如果存在,则编辑现有资源?
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(....)
可以说我有一个模型,Foo
它很大并且有很多组件.对于给定的Ajax查询,我只对一个特定属性感兴趣bar
,这是foos表中的一列.
有没有一种简单的方法可以加载该属性,而不用费心去检索记录的其余部分?例如,如果我想知道的是ID为#_ _的 Foo栏,我该如何检索?
我想将我的应用程序置于维护模式,但仍然可以让管理员/版主登录并使用该网站.两个原因:
我在应用程序中进行了一些更改,这些更改最适合使用应用程序内界面而不是控制台.
版主无法访问控制台,但绝对可以帮助我们完成维护任务.
你会怎么建议这样做?我一直在尝试设置一个环境变量,ADMIN_MODE
并在它是真的时更改所有权限,但这看起来非常狡猾和缓慢.
我正在使用CanCan和Devise,这是值得的,但我绝对乐于接受任何建议.
谢谢!
可能重复:
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) 在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
回调并使用正则表达式转换字段,还是创建某种验证或不同的东西?我非常欣赏答案,重点是理由,为什么你会这样或那样做,因为这是我最坚持的.
好吧,我对obj-c + cocoa完全不熟悉,所以这可能是显而易见的,但这里有:
我一直在从命令行应用程序转向可可应用程序,学习如何在Xcode中使用objective-c.我不太了解的一件事是AppDelegate的作用以及它如何连接到main.m
看起来你可以将你的整个程序放在appdelegate中它运行正常,你甚至不需要main.m,但不是相反,如果你正在制作一个可可应用程序你必须至少有appdelegate.
我已经做了很多php web开发和命令行工具,所以我想我正在寻找的是程序首先执行的文件,旨在"控制"其余部分.
任何人都可以帮助我理解Cocoa程序中发生了什么,AppDelegate和main.m是如何相关的,以及该程序的流程应该是什么?
我正在研究一个模型,该模型在创建对象时需要设置两个关联,在一种情况下除外.
基本上,它需要像这样工作.
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是否是特定对象.
你怎么做这样的事情?
我一直在谷歌搜索这个并且找不到答案,这让我觉得答案是否定的,但我想我会在这里问,以防有人确切知道.
Ruby是否有定义方法的钩子(即在模块或类上)?
如果没有,是否有人熟悉该main
对象的实现,以便知道Object
在顶层定义方法时它是如何复制的?
真的好奇这个.谢谢你的任何信息:)
activerecord ×4
ruby ×3
block ×1
carrierwave ×1
cocoa ×1
delegates ×1
edit ×1
hash ×1
if-statement ×1
input ×1
link-to ×1
maintenance ×1
new-operator ×1
null ×1
objective-c ×1
sql ×1
syntax-error ×1
validation ×1
where ×1