小编edg*_*ner的帖子

Rails 3:模型中的哈希访问器?

除了我已经完成的教程示例之外,我正在努力扩展我对一些基本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)

ruby-on-rails

4
推荐指数
1
解决办法
1418
查看次数

在Rails生产环境中运行Thor

我想在生产中的rails 3上运行一些Thor任务,但我不知道如何设置它.以下代码不起作用

class CheckData < Thor
  require File.expand_path('config/environment.rb')
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails thor

4
推荐指数
1
解决办法
2719
查看次数

相交的非空数组

我有三个我想要相交的数组,但我想忽略那些空的数组.

这段代码看起来太冗长了.有更有效的方法吗?

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)

ruby

4
推荐指数
1
解决办法
320
查看次数

在数据库中建模1到1..n的关系

您如何为客人关系建模预订酒店房间(如果重要的话,在PostgreSQL中)?一个房间可以有几个客人,但至少有一个.

当然,人们可以通过外键将客人与预订联系起来booking_id.但是,如何在DBMS级别强制执行一个房间必须至少有一个访客?

可能是不可能的?

database postgresql

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

如何使用本地化文件使Rails 3路由器本地化URL?

我希望能做的是:

在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语言环境的动作.

这样做的任何简单或复杂的方式?

routing localization ruby-on-rails internationalization

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

Rails:在params哈希上动态迭代以验证它们是否存在

我有一个表格,有很多参数被传递给控制器​​进行处理.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错误?

谢谢!

ruby-on-rails

3
推荐指数
2
解决办法
6299
查看次数

在CSS中为无序列表设置高度?

我的页面页面有一个列表,我希望水平显示.

但是因为我把它变成了一个水平排列的内联列表,所以背景图像会被垂直切断.最大的是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)

这是它的样子: 页脚

如您所见,一半图像被切断.

请求解决方案越简单越好.

css

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

没有块的Ruby Hash/Array delete_if

根据Ruby Hash/Array文档,delete_if如果没有给出块,该方法返回一个枚举器.这有用吗?有人能举例说明这种模式吗?

ruby

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

Rails 3多态关联引发NameError

我有以下两种型号:

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)

ruby-on-rails polymorphic-associations

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

Ruby注入递归?

目标是从['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)

为什么是这样?知道如何在优雅的单线程中实现理想的效果吗?

ruby recursion

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