1

これらの操作の違いを教えてください。最初のコードは正常に動作します:

1) for elem in(mr)
     elem.shedule = Date.new(date.year, date.month, date.day)  
   end

しかし、私は使用したいと思いますmap:

2) mr.map!{ |elem| elem.shedule = Date.new(date.year, date.month, date.day) }  

2 番目のコードはエラーを返します。

 NoMethodError in Events#index

Showing C:/Sites/calend/app/views/events/_calendar.html.erb where line #9 raised:

undefined method `shedule' for Thu, 04 Apr 2013:Date

Extracted source (around line #9):

6:   </h2>
7:   <%= calendar_for(@repeats, :year => @date.year, :month => @date.month) do |calendar| %>
8:     <%= calendar.head('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') %>
9:     <%= calendar.day(:day_method => :shedule) do |date, events| %>
10:       <%= date.day %> <%= link_to '+', new_event_path(date: date) %>
11:       <ul>
12:         <% for event in events %>
4

1 に答える 1

6

map間違った方法で使用していますeach。代わりに使用する必要があります。コードは次のようになります。

mr.each do |elem| 
  elem.shedule = Date.new(date.year, date.month, date.day)
end 

mapArray 内の各要素をブロックによって返される値に置き換えます (以下の Linuxios コメントを参照)。この例では、ブロックは Date オブジェクトを返します。map!新しい配列を作成せずに同じ操作を実行します。したがって、この例mrでは、イベントではなく日付オブジェクトの配列です。

さらに、Ruby コードでは の使用は非常にまれであり、通常はsinceforに置き換えられます。each

[1, 2, 3].each do |x|
  puts x
end

ほぼ同等です(違いについては、この回答へのMladen Jablanovićのコメントを参照してください):

for x in [1, 2, 3]
  puts x
end

前者はより「Rubyish」と見なされます。

于 2013-04-05T09:54:01.810 に答える