2015-07-10 27 views
0

我收到一個未定義的方法`名稱'爲#爲我的Rails項目錯誤。我知道這個名字是通過使用我的控制檯進行雙重檢查來爲事件定義的,所以我不明白爲什麼它不會加載。下面是我的一些代碼:爲什麼我的名字方法未定義?

應用顯示:

<h1><%= @app.title %></h1> 
<h5>App URL: <%= @app.url %></h5> 
<h5>App User_id: <%= @app.user_id %></h5> 
<br> 

    <h2> Events </h2> 
     <% @events.each do |event| %> 
     <div> 
      <%= event.name %><span class="badge"><%= event.count %></span> 
     </div> 
     <% end %> 
    <br> 
    <%= link_to "Edit", edit_app_path(@app), class: 'btn btn-success' %> 

應用程序控制器:

class AppsController < ApplicationController 
    def create 
    @app = App.new(params.require(:app).permit(:title, :url)) 
    @app.user_id = 1 
    if @app.save 
     flash[:notice] = "App was saved!" 
     redirect_to @app 
    else 
     flash[:error] = "There an error, oh noes!Please try again!" 
     render :new 
    end 
    end 

    def new 
    @app = App.new 
    end 

    def show 
    @app = App.find(params[:id]) 
    @events = @app.events.group_by(&:name) 
    end 

    def index 
    @apps = App.all 
    end 

    def edit 
    @app = App.find(params[:id]) 
    end 

    def update 
    @app = App.find(params[:id]) 
    if @app.update_attributes(params.require(:app).permit(:title, :url)) 
     flash[:notice] = "Application was updated." 
     redirect_to @app 
    else 
     flash[:error] = "There was an error saving the app. Please try again." 
     render :edit 
    end 
    end 

    def destroy 
    @app = App.find(params[:id]) 
    if @app.destroy 
     flash[:notice] = "App was removed." 
     redirect_to @app 
    else 
     flash[:error] = "App couldn't be deleted. Try again." 
     redirect_to @app 
    end 

    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 
end 

活動種子:

create_table "events", force: :cascade do |t| 
    t.integer "app_id" 
    t.string "name" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

應用型號:

class App < ActiveRecord::Base 
    belongs_to :user 
    has_many :events 
end 

完全錯誤日誌:

Completed 500 Internal Server Error in 19ms 

ActionView::Template::Error (undefined method `name' for #<Array:0x007fcc53394af0>): 
    6: <h2> Events </h2> 
    7: <% @events.each do |event| %> 
    8:  <div> 
    9:  <%= event.name %><span class="badge"><%= event.count %></span> 
    10:  </div> 
    11: <% end %> 
    12: <br> 
    app/views/apps/show.html.erb:9:in `block in _app_views_apps_show_html_erb__2949113196422864311_70257764571040' 
    app/views/apps/show.html.erb:7:in `each' 
    app/views/apps/show.html.erb:7:in `_app_views_apps_show_html_erb__2949113196422864311_70257764571040' 


    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (7.1ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (4.1ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.9ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (71.2ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/web-console-2.1.3/lib/web_console/templates/_markup.html.erb (0.7ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/web-console-2.1.3/lib/web_console/templates/style.css.erb within layouts/inlined_string (0.7ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/web-console-2.1.3/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (0.5ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/web-console-2.1.3/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (0.3ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/web-console-2.1.3/lib/web_console/templates/console.js.erb within layouts/javascript (69.6ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/web-console-2.1.3/lib/web_console/templates/main.js.erb within layouts/javascript (0.4ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/web-console-2.1.3/lib/web_console/templates/error_page.js.erb within layouts/javascript (0.7ms) 
    Rendered /Users/ericpark/.rvm/gems/ruby-2.2.0/gems/web-console-2.1.3/lib/web_console/templates/index.html.erb (156.5ms) 
+0

什麼是你'App'模型的結構哈希? – simonwo

+0

你能發佈完整的日誌錯誤嗎? – Pavan

+0

Yup剛剛在我的編輯中添加了模型並完成了日誌錯誤。 –

回答

1

在這樣的情況下,簡單的調試打印將揭示問題。當你認爲應該是@eventsname沒有定義?你確定@events是你認爲的嗎?

p @events行添加到您的控制器,重試請求並讀取日誌。對未來的建議。 :)

問題從這裏開始:

@events = @app.events.group_by(&:name) 

我敢肯定的group_by輸出是一個哈希,其中的鍵是不同的名稱和值,所有具有相同名稱的事件的數組。 (取決於什麼樣的group_by完全實現,當然)

<% @events.each do |event| %> 

event這裏就不Event類的實例,但兩個元素的數組,[name, [event1, event2, ...]]。你應該迭代這個嵌套數組來獲得真實的事件,它們都有你想要的方法。

<% @events.each do |name, events| %> 
    <%= name %> <%= events.length %> 
+0

謝謝Sergio,試圖向我解釋這個問題。只是爲了澄清p @ events在將其添加到控制器時會做什麼。我剛添加它,它似乎沒有任何輸出?那會在我的終端嗎?對不起還有新的鐵軌。 –

+0

是的,它會去終端。 'p @ events'等於'puts @ events.inspect',它打印對象的詳細表示。 –

+0

gotcha,所以我收到的輸出是'''「真的很好吃。」=> [#],」Velit deleniti eligendi commodi。「=> [#]} '''。看到它的散列,我需要以不同的方式訪問它 –

1

@events是你必須遍歷像

<% @events.each do |event| %> 
    <div> 
     <%= event[0] %><span class="badge"><%= event[1].count %></span> 
    </div> 
    <% end %> 
相關問題