除了我已经完成的教程示例之外,我正在努力扩展我对一些基本Rails概念的理解.我找不到任何Q&A/docs/walkthroughs正在做我想做的事情,所以我很有可能以错误的方式解决这个问题.
我有一个包含许多标签的Team对象.Team表有一些标准化字段,但团队的大多数特征都存储为标签,即团队'Virginia Cavaliers'有标签
{[tag_name => 'Conference', tag_value => 'ACC'],
[tag_name => 'Division', tag_value =>'I']}
Run Code Online (Sandbox Code Playgroud)
数据库设计旨在容纳同一表中的许多类型的团队,标签表便于按任意标准搜索团队.
到现在为止还挺好.我无法弄清楚的是如何最好地访问团队的团队属性.
class Team < ActiveRecord::Base
belongs_to :sport
has_many :team_subscriptions
has_many :users, :through => :team_subscriptions
has_many :tags
def tagvalue
#Set up a hash to retrieve tag value by name?
@tagvalue = {}
tags.each do |t|
@tagvalue[t.tag_name] = t.tag_value
end
Rails.logger.info(@tagvalues.keys)
end
end
Run Code Online (Sandbox Code Playgroud)
哈希就在那里,但我不能按照我喜欢的方式访问它.
<%= @team.tagvalue["Conference"] %>
Run Code Online (Sandbox Code Playgroud)
这是明智的吗?可能?谢谢你的回复.
*根据反馈编辑(本网站很棒)*
第二个建议是语法上的光滑,但我可以看到两个挂起.我必须捕获空值,因为并非所有团队都拥有所有标签,有时它们会出现在同一个列表中:
我笨拙的实施:
has_many :tags do
def [](key)
set = where(:tag_name => key)
if set.length > 0
set.first[:tag_value]
end …Run Code Online (Sandbox Code Playgroud) 我想在生产中的rails 3上运行一些Thor任务,但我不知道如何设置它.以下代码不起作用
class CheckData < Thor
require File.expand_path('config/environment.rb')
end
Run Code Online (Sandbox Code Playgroud) 我有三个我想要相交的数组,但我想忽略那些空的数组.
这段代码看起来太冗长了.有更有效的方法吗?
if a.empty? && b.empty?
abc = c
elsif a.empty? && c.empty?
abc = b
elsif b.empty? && c.empty?
abc = a
elsif a.empty?
abc = b & c
elsif b.empty?
abc = a & c
elsif c.empty?
abc = a & b
else
abc = a & b & c
end
Run Code Online (Sandbox Code Playgroud) 您如何为客人关系建模预订酒店房间(如果重要的话,在PostgreSQL中)?一个房间可以有几个客人,但至少有一个.
当然,人们可以通过外键将客人与预订联系起来booking_id.但是,如何在DBMS级别强制执行一个房间必须至少有一个访客?
可能是不可能的?
我希望能做的是:
在config/routes.rb中
resources :posts
Run Code Online (Sandbox Code Playgroud)
在config/locale/en.yml中
en:
resources:
posts: "posts"
new: "new"
edit: "edit"
Run Code Online (Sandbox Code Playgroud)
在config/locale/tr.yml中
tr:
resources:
posts: "yazilar"
new: "yeni"
edit: "duzenle"
Run Code Online (Sandbox Code Playgroud)
得到
I18n.locale = :en
edit_post_path(3) #=> /posts/3/edit
I18n.locale = :tr
edit_post_path(3) #=> /yazilar/3/duzenle
Run Code Online (Sandbox Code Playgroud)
我也希望Rails随时匹配这些路由中的任何一个,并在params哈希中传递相关的语言环境,这样当我导航到时/yazilar,请求应该被路由到params哈希中posts#index的:tr语言环境的动作.
这样做的任何简单或复杂的方式?
我有一个表格,有很多参数被传递给控制器进行处理.params的不同"集合"以类似的方式命名:
setname1_paramname
setname1_paramname2
Run Code Online (Sandbox Code Playgroud)
现在,我需要检查其中一个"集合"以验证是否已提交所有字段.现在,我正在使用手动If或样式声明:
if setname1_paramname.blank? || setname1_paramname2.blank? || ...etc
@object.errors.add_to_base("All setname1 fields are required.").
render :action => 'new'
return false
end
Run Code Online (Sandbox Code Playgroud)
有没有办法以编程方式循环这些参数,并将它们添加到@object错误?
谢谢!
我的页面页面有一个列表,我希望水平显示.
但是因为我把它变成了一个水平排列的内联列表,所以背景图像会被垂直切断.最大的是27px高.
所以我被卡住了......我知道为什么以下是做它正在做的事情.但是我该如何解决呢?
这是html:
<div id="footer">
<ul>
<li id="footer-tmdb"><a href="">Film data courtesy of TMDB</a></li>
<li id="footer-email"><a href="">Contact Us</a></li>
<li id="footer-twitter"><a href="">Follow Us</a></li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
和CSS:
#footer ul {
height: 27px;
}
#footer ul li {
display: inline;
list-style: none;
margin-right: 20px;
}
#footer-tmdb {
background: url('../images/logo-tmdb.png') no-repeat 0 0;
padding-left: 140px;
}
#footer-email {
background: url('../images/icon-email.png') no-repeat 0 3px;
padding-left: 40px;
}
#footer-twitter {
background: url('../images/icon-twitter.png') no-repeat 0 0;
padding-left: 49px;
}
Run Code Online (Sandbox Code Playgroud)
这是它的样子:

如您所见,一半图像被切断.
请求解决方案越简单越好.
根据Ruby Hash/Array文档,delete_if如果没有给出块,该方法返回一个枚举器.这有用吗?有人能举例说明这种模式吗?
我有以下两种型号:
class FuzzyDate < ActiveRecord::Base
belongs_to :fuzzy_dateable, :polymorphic => true
end
class Device < ActiveRecord::Base
has_one :received_date, :as => :fuzzy_dateable
end
Run Code Online (Sandbox Code Playgroud)
使用以下架构:
create_table "devices", :force => true do |t|
t.string "meid"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "fuzzy_dates", :force => true do |t|
t.date "date"
t.integer "fuzz"
t.integer "fuzzy_dateable_id"
t.string "fuzzy_dateable_type"
t.datetime "created_at"
t.datetime "updated_at"
end
Run Code Online (Sandbox Code Playgroud)
让我们开启控制台,好吗?
>> d = Device.create(:meid => "A")
=> #<Device id: 1, meid: "A", created_at: "2010-12-16 06:52:55", updated_at: "2010-12-16 06:52:55">
>> fd = FuzzyDate.create(:date => …Run Code Online (Sandbox Code Playgroud) 目标是从['a','b','c']最后开始并最终结束{'a'=>{'b'=>{'c'=>{}}}}
所以,得到我的方位,我这样做:
['a','b','c'].inject({}){|h,v| h.update(v => {})}
# => {"a"=>{}, "b"=>{}, "c"=>{}}
Run Code Online (Sandbox Code Playgroud)
然后想一想,如果我实际传递结果哈希,它将递归并嵌套,但是:
['a','b','c'].inject({}){|h,v| h.update(v => {}); h[v]}
# => {}
Run Code Online (Sandbox Code Playgroud)
为什么是这样?知道如何在优雅的单线程中实现理想的效果吗?