我是Ruby on Rails的新手,我對我的MVC邏輯沒有信心。Rails /在視圖中使用模型
我繼續這樣:
- 我有一個模型「用戶」
- 在我的控制,我定叫實例變量
@users = User.all
- 在我的意見,我執行我的邏輯是這樣的:
<%= @users.each ... %>
我問我自己,我可以繞過控制器一步,在我的觀點寫:<%= User.all.each ... %>
我想在我的項目中使用的良好做法,是第二種方式可以接受嗎?
我是Ruby on Rails的新手,我對我的MVC邏輯沒有信心。Rails /在視圖中使用模型
我繼續這樣:
@users = User.all
<%= @users.each ... %>
我問我自己,我可以繞過控制器一步,在我的觀點寫:<%= User.all.each ... %>
我想在我的項目中使用的良好做法,是第二種方式可以接受嗎?
然後complexier User.all.each 例如
@cars = Car.scoped
@cars = @cars.includes(:body_type, :brand, :city, :drive, :engine_type, :model, :region, :transmission)
@cars = @cars.select(['`cars`.*','`stats`.recount']).joins('left outer join stats on (cars.model_id = stats.model_id and cars.year = stats.year)')
@cars = @cars.limit(15)
和模式和多個其他邏輯
鑑於你只需要渲染這個對象
在我的例子中我使用視圖
= render @cars
,並在視圖/ _car.html.haml
- for car in @cars
.row-fluid.car
= car.price
= etc
所以呈現局部 ,如果你想改變你改變視圖
如果你想改變收集過程的行爲你改變控制器
如果你想改變對象的行爲喲ü改變模型
同樣的事情,與錯誤
都嚴格順序
的順序是善與美
從技術上講,你可以,你的用戶模型只是一個Ruby類,並且是從你的觀點接近。但是,這絕對不是一個好的做法。
與其不斷探討爲什麼不應該這樣做,我只會鏈接到一些文章/文檔,並建議您在移動之前首先了解MVC體系結構背後的原因。進一步到Rails:
謝謝你的文章,將是有益的:) – Syph3R
INTERAC的想法與ActiveRecord的查詢接口只從控制器內部操作是可維護性。如果你遵循這個方法,你可以通過查看它的控制器大致瞭解應用程序應該做什麼。此外,如果邏輯變得更加複雜(例如,您想添加身份驗證和/或授權),則該行爲將進入控制器。
相反,如果你看一下你的觀點之一,它應該清楚的頁面的外觀。如果有呼籲模擬整個地方的課程,這是不明顯的。
也許,你可以認爲它是這樣的:
如果你想改變你的應用程序的某一方面,你應該只需要觸摸負責一個方面的respecitve組件。
所以是的,它是可以移動的一切來查看(甚至數據庫請求),但它不是好主意,在理想情況下,你應該將它移動到控制器
好的,明白。 我想再提一點建議。 如果我的控制器中有一個實例變量,它在'new'操作中設置,我可以在我的視圖'new.html.erb'中使用它。但是,如果用戶面臨驗證錯誤,他將被重定向到我的控制器中的「創建」操作,我必須再次設置實例變量。它發生在我在collection_select助手中使用我的實例變量時。 有沒有辦法避免這種重複? (這是我試圖直接在我的視圖中使用模型的主要原因...) – Syph3R
原因在RESTFULL模式中,您無法直接在視圖中獲取響應。你喊新的參數,並從創建行動中獲取響應。你必須這樣做,因爲它在RESTFULL範式中是正確的。 – antiqe
在其他情況下你可以直接使用模型,但它是php-way不是rails-way 它不是嚴格的規則,它是一個建議讓生活更完美 – antiqe