影片day2.5 中出現 constant ItemController


#1

您好:
參考 您的Day2.5影片
01:34 左右,要做 manager/sign_in的動作,然後就出現
constant ItemController

請問,我該如何去 找問問題點
我看過 相關的 items_controller.rb了 ,但不知那邊有 item_controller?
謝謝!

Routing Error
uninitialized constant ItemController

Rails.root: /home/wxx/R02/shop/shop
Application Trace | Framework Trace | Full Trace

activesupport (4.2.7.1) lib/active_support/inflector/methods.rb:261:in `const_get'
activesupport (4.2.7.1) lib/active_support/inflector/methods.rb:261:in `block in constantize'
activesupport (4.2.7.1) lib/active_support/inflector/methods.rb:259:in `each'
activesupport (4.2.7.1) lib/active_support/inflector/methods.rb:259:in `inject'
activesupport (4.2.7.1) lib/active_support/inflector/methods.rb:259:in `constantize'
actionpack (4.2.7.1) lib/action_dispatch/routing/route_set.rb:70:in `controller_reference'
actionpack (4.2.7.1) lib/action_dispatch/routing/route_set.rb:60:in `controller'
actionpack (4.2.7.1) lib/action_dispatch/routing/route_set.rb:39:in `serve'
actionpack (4.2.7.1) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.7.1) lib/action_dispatch/journey/router.rb:30:in `each'
actionpack (4.2.7.1) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.7.1) lib/action_dispatch/routing/route_set.rb:817:in `call'
warden (1.2.6) lib/warden/manager.rb:35:in `block in call'
warden (1.2.6) lib/warden/manager.rb:34:in `catch'
warden (1.2.6) lib/warden/manager.rb:34:in `call'
rack (1.6.4) lib/rack/etag.rb:24:in `call'
rack (1.6.4) lib/rack/conditionalget.rb:25:in `call'
rack (1.6.4) lib/rack/head.rb:13:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/flash.rb:260:in `call'
rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.7.1) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.7.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
activerecord (4.2.7.1) lib/active_record/migration.rb:377:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.7.1) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
activesupport (4.2.7.1) lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
activesupport (4.2.7.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.7.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
web-console (2.3.0) lib/web_console/middleware.rb:20:in `block in call'
web-console (2.3.0) lib/web_console/middleware.rb:18:in `catch'
web-console (2.3.0) lib/web_console/middleware.rb:18:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.7.1) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.7.1) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.7.1) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.7.1) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.7.1) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.7.1) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.4) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.7.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
actionpack (4.2.7.1) lib/action_dispatch/middleware/static.rb:120:in `call'
rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
railties (4.2.7.1) lib/rails/engine.rb:518:in `call'
railties (4.2.7.1) lib/rails/application.rb:165:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
rack (1.6.4) lib/rack/content_length.rb:15:in `call'
rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service'
/home/wxx/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
/home/wxx/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
/home/wxx/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'

#2
ItemController  <==> item_controller.rb
                 vs
ItemsController <==> items_controller.rb

檔名和 class name 要成對才行,你可以取其一,你應該自己手打打錯了才是,&附上我自己建議的:

model & relation 建議保持單數,就不用考慮打一串到底要不要加 s 的問題
controller 因為 route 的關係建議複數,反正 rake routes 複製貼上即可

就這樣而已,以上


#3

您好,謝謝
不過 目前我 看 items_controller.rb 如下\,沒有 item_controller.rb

[code]
controllers\items_controller.rb
內容 class ItemsController < ApplicationController

================================

dashboard\admin\items_controller.rb

內容
class Dashboard::Admin::ItemsController < Dashboard::Admin::AdminController
def index
@items =@paginate =Item.paginate(:page => params[:page] )
end
end

[code]


#4

你好:最後 有在 new.html.erb 找到 item 少一個s ,有可能是這邊!
另外 我之前也用 127.0.0.1:3000/managers/sign_in
仍會 出現問題,最後用
http://127.0.0.1:3000/dashboard/admin/items
才正常顯示

另外,想請問的是:
1.以下 使用 layout ‘admin’ ,該admin 是指 views/lyaout/admin.html.erb 嗎?
之後 繼承Dashboard 的 頁面,都會 直接使用 admin.html.erb 嗎?

class Dashboard::Admin::AdminController < ApplicationController
  before_action :authenticate_manager!
   layout 'admin'  # 加入該段
end

2.以下routes中,

 dashboard_admin_items GET           /dashboard/admin/items(.:format)            dashboard/admin/items#index
                             POST   /dashboard/admin/items(.:format)             dashboard/admin/items#create
    new_dashboard_admin_item GET    /dashboard/admin/items/new(.:format)         dashboard/admin/items#new
   edit_dashboard_admin_item GET    /dashboard/admin/items/:id/edit(.:format)    dashboard/admin/items#edit
        dashboard_admin_item GET    /dashboard/admin/items/:id(.:format)         dashboard/admin/items#show
                             PATCH  /dashboard/admin/items/:id(.:format)         dashboard/admin/items#update
                             PUT    /dashboard/admin/items/:id(.:format)         dashboard/admin/items#update
                             DELETE /dashboard/admin/items/:id(.:format)         dashboard/admin/items#destroy

items#create 與 items#new 有何區別? 不都是 要新增一筆資料嗎?
items#update 有PATCH 與 PUT ,它們有何差異?

3.admin 有logout 嗎?想在測試 重新登入 admin 的管理頁面看看
還是 影片後面會講?

謝謝!


#5

繼承架構中看老爸是啥,吃了啥變成綠色的,生下的也會是綠色的,所以

1.基本上是

2.所以你基本的都還沒玩過一次唄…new是顯示『新增頁面』,否則你要在列表頁就要 key 表單?,而 create 是負責接收資料來修改就轉到別的地方去的,所以本身沒頁面

PATCH / PUT 的差別請去看 HTTP 最基本的定義

基本上其實最主要要和 GET 切割,因為網址誰都可以按,包含釣魚用的 email,所以修改或是刪除行為都不該是 GET,其餘也可以去參考啥鬼是 RESTful 的定義唄

3.你可以選擇把全部都看完一輪後再來問問題如何?不過 2.5 day 的 demo 應該就只有這樣,其餘是補述之類的, 2.5 day 其實是全部課程的綜合體就是了,但你不應該認為 2.5 day 就是全部的東西才是


#6

您好:
謝謝您!
因為看邊影片 ,邊要實作,較慢
還沒全部看過一次,所以看到哪邊,有問題,就先問一下!
造成困擾,請見諒!


#7

不好意思,再確認一下

class Dashboard::Admin::AdminController < ApplicationController
before_action :authenticate_manager!
layout ‘admin’ # 加入該段
end

其中 Dashboard:: 跟 namespac 內的 Dashboard 相關
也跟其 對應的目錄相關?
謝謝!


#8

其實如果你有看過我們臉書的社團的話,有人已經把整個 source code 放上去了就是

and 你真的卡太多還是先看完全部唄,至少把一些基本的知識先補完,不然我們在浪費彼此的時間之類的


#9

items#create 與 items#new 有何區別?
new => 通常是開出html表單
create => 通常是接收new的表單進行處理

最大的差別在於,new的時候,還不會存到資料庫中
直到create執行完畢,資料庫才會有此筆紀錄

其實有些問題你自己改個檔名就會知道了,不必特別上來問人
原本檔名route的到,你改完檔名route不到,就表示兩者相關了,不是嗎 : )


#10

不好意思打擾您:
還是說 您的影片 是有reails 基礎的才看!

我另外登入後台後,使用 「新增產品」按鈕==> http://192.168.1.106:3000/dashboard/admin/items/new
=>但連結過去後 ERR
wrong number of arguments (given 3, expected 1…2)

我有參考NickWarm/jccart 的說明
他是 <%= form_for @item, dashboard_admin_items_path, method: :post do |f| %>
實際還是錯誤.

我再以

   <%= form_for( @item , { :url => dashboard_admin_items_path, :method => 'post' } )  do |f| %>

改成hash, 他可過!

但卻又出現 First argument in form cannot contain nil or be empty
@item 要設定預設值? 不是系統會自動帶?

不好意思,再麻煩一下,過一下各一個關卡!
謝謝!


#11

不是基礎 … 而是 Rails 課程到 day4,而你看到 day2 就想通關 day 2.5 讓我有點困擾唄 …

其實 day 2.5 應該要放到最後會好點,單純有人工作需要所以上次 cycle 就先實作了

所以我會認為你看完全部(day7)後再去做 day 2.5 應該會好點

再來,任何錯誤請丟出 error log & source code,而不是就這樣略過只講大概,不然我只能觀落陰哩

不過你的問題應該是 controller 內沒有做類似

@item = Item.new

的動作,所以 @item 為 nil 你就餵進去了 … 這樣人家要怎樣包 form 哩|||,凡事有因有果,請把輸入和輸出搞清楚唄


#12

你可以把你的專案upload到github上,這樣大家比較好瞭解你的問題
rails是以MVC架構的,你這樣只貼出View的code,別人不知道你的Controller或Model怎麼設計的
很難瞭解你的問題出在哪裡,只能用猜的 : )


#13

不好意思,
我以為是 跟著day 去看!
既然看到這邊了,就先順著看看 , 等以後 全部看完再回來複習

不過想再請教一件事: day2.5 :2小時左右
app/models/item.rb中,設定

class Item < ActiveRecord::Base
       belongs_to :cate
       has_attached_file :cover,
         styles: {
            original: "1024x1024>",
            cover: "300x300>",
            icon: "150x150#"
      }, 
      default_url: "/images/:style/missing.png"
    validates_attachment_content_type :cover, content_type: /\Aimage\/.*\z/
end

而 app/views/items/index.html.rb

 <tbody>
    <% @items.each do |item| %>
      <tr>
        <td><%= image_tag(  item.cover.url(:original)  )  %></td>
        <td><%= item.name %> (<%= item.price%>) </td>
        <td>加入購物車</td>
      </tr>
    <% end %>
  </tbody>

我設定 (:original ) 或 (:cover) 都不會有 missinage圖片出現。
只有 (:icon) 才會有。
這是 關聯不同檔案嗎?

另外 在
dashboard/admin/index.html.erb,中

<td><%= image_tag( itemx.cover.url(:icon) ) %> </td>

也是只有 icon 有missing圖片,其他 :cover等就沒有圖片
且 不會隨著 styles 內的大小 自動修正 顯示大小!

另外github,還沒有用過,不好意思
後續在學習如何用!
不好意思!


#14

這篇有解釋一些符號和相關的東西哩…

至於有沒有 :icon 這件事情,你應該要先去看有無"檔案"才是,你的 path 應該已經告訴你檔案在哪裡了,所以必須先檢查你的 image path 下有無檔案為先決條件,且你有安裝 imagemagick 之類的套件嗎? 否則是無法轉圖的

當然如果你的 model 沒有吃到圖片一切其實都不用說了,大概就這樣而已


#15

您好:
不好意思,再次麻煩您
謝謝您:
<%= image_tag( item.cover.url(:original) ) %> 這一段中

若<%= image_tag( item.cover.url(:icon) ) %> 會出現 /images/:style/missing.png
但其他 :original 與 :cover 就不會出現 /images/:style/missing.png ,只會有"Missing"系統預設圖片

而看您影片, :original 與 :cover 與 :icon
會裁減 縮放圖片,但 我實測 沒有效果…
所以才會在提問題請教!


#16

我其實…已經解釋完了

首先,我已經說明你可能沒有裝 imagemagick,我不確定你的作業系統是啥,不過可以的話請先去瞭解什麼是 imagemagick(一個 linux 上最常用的繪圖指令)而不是看不懂我說啥就把關鍵字跳過

這邊是官方基本指令教學,滿滿的圖片和參考
http://www.imagemagick.org/Usage/basics/

如果你是 Ubuntu 你應該可以這樣下指令就可以安裝到好,之後再重新上傳測試

sudo apt-get install imagemagick

再來,我知道你一直問問題,我也盡量回你,但是你問問題一直都沒重點,只說沒出現圖片,因為你一直都沒把關鍵的 log 丟出來,paperclip 如果沒有轉檔或是轉檔失敗,甚至轉檔指令都會在 log 內顯示的,這樣下去只是在浪費我們彼此的時間而已

missing image 通常都不是重點,因為應該都要有圖片才是,否則你的圖片上傳系統只是為了看到那東西而存在的?不會是這樣吧?且判斷 column 裡面是否有值就知道是否有上傳成功,判斷到沒成功的話就顯示另外一張更漂亮的圖片甚至加說明即可,所以那東西是完全沒有重要性的,好嗎?

我們重新再來一次,提問的禮貌,請你附上:程式碼,作業系統名稱,Log,以及其他盡可能的詳細資訊,並且簡短扼要的說明你的問題,否則我們都在浪費時間,每個人的耐心都是有限的,只是看有沒有到臨界值而已

我順便把你問的問題在我眼中的觀點給你看
『我設定 (:original ) 或 (:cover) 都不會有 missinage圖片出現。』
『也是只有 icon 有missing圖片,其他 :cover等就沒有圖片』
『但其他 :original 與 :cover 就不會出現 /images/:style/missing.png ,只會有"Missing"系統預設圖片』

所以你的問題到底想解決什麼問題?你要不要在想清楚一點?

還有幾個問題,post form 內要開 multipart,否則吃不到檔案上傳,且你是否有在 controller 內把 permit 打開?否則 model 是接收不到任何值的,而這些"跡象"都會在 log 內顯示的…以上


#17

不好意思,造成困擾,敬請見諒!


#18

話說,我也來回一下,我之前試了也跟你一樣,
<%= image_tag product.avatar.url(:medium)%>
這樣是不會變的
後來是改成這樣才ok
<%= link_to image_tag(product.avatar.url, :height => 250, :width => 250), product %>
但僅限development環境下,

在production模式下這樣是可以的
<%= image_tag product.avatar.url(:medium)%>


#19

這陣子又試作,又可以縮了,跟上次做的差別在應該只差在table裡的這個,之前的column應該是string

def self.up
change_table :movies do |t|
  t.attachment :image
 end
end

def self.down
remove_attachment :movies, :image
end