0

ハッシュの値を印刷するのに助けが必要です。私の「web.rb」ファイルには次のものがあります。

class Main < Sinatra::Base

    j = {}
    j['Cordovan Communication'] = {:title => 'UX Lead', :className => 'cordovan', :images => ['http://placehold.it/350x150','http://placehold.it/350x150','http://placehold.it/350x150']}
    j['Telia'] = {:title => 'Creative Director', :className => 'telia', :images => ['http://placehold.it/350x150','http://placehold.it/350x150','http://placehold.it/350x150','http://placehold.it/350x150']}


    get '/' do
        @jobs = j
        erb :welcome
    end
end

「welcome.rb」でハッシュの値を出力していますが、機能しません。

<% @jobs.each do |job| %>  
    <div class="row">
        <div class="span12">
            <h2><%=h job.title %></h2>
        </div>
    </div>
<% end %> 

これが私のエラーメッセージです:

NoMethodError at / undefined method `title' for #<Array:0x10c144da0>
4

2 に答える 2

7

@jobs次のように考えてください。

@jobs = {
  'Cordovan Communication' => {
    :title => 'UX Lead', 
    :className => 'cordovan',
    :images => ['http://placehold.it/350x150','http://placehold.it/350x150','http://placehold.it/350x150']},
  'Telia' => {
    :title => 'Creative Director',
    :className => 'telia',
    :images => ['http://placehold.it/350x150','http://placehold.it/350x150','http://placehold.it/350x150','http://placehold.it/350x150']}
}

次に、ハッシュで呼び出されると、キーと値がブロックに渡されることを思い出してeachください。次のようになることがわかります。

@jobs.each do |name, details|
  # On first step, name = 'Cordovan Communication', details = {:title => 'UX Lead', ...}
end

したがって、あなたが望むのはおそらく次のとおりです。

<% @jobs.each do |name, details| %>  
    <div class="row">
        <div class="span12">
            <h2><%=h details[:title] %></h2>
        </div>
    </div>
<% end %> 
于 2013-03-11T15:53:44.463 に答える
2

オブジェクトjob.titleにはtitleメソッドがないため、Ruby ハッシュの自動メソッド作成はありません。たとえば、 を呼び出すことはできません。Hash代わりに、 を呼び出すことができますjob[:title]

また、 は配列ではなく@jobsハッシュであるため、. を使用することは可能ですが、この場合、期待どおりの結果が得られません。@jobs.each_pair@jobs.each@jobs.each

于 2013-03-11T15:54:09.403 に答える