2012-06-28 72 views
1

我是Ruby on Rails的新手,我對我的MVC邏輯沒有信心。Rails /在視圖中使用模型

我繼續這樣:

  • 我有一個模型「用戶」
  • 在我的控制,我定叫實例變量@users = User.all
  • 在我的意見,我執行我的邏輯是這樣的:<%= @users.each ... %>

我問我自己,我可以繞過控制器一步,在我的觀點寫:<%= User.all.each ... %>

我想在我的項目中使用的良好做法,是第二種方式可以接受嗎?

回答

1
在控制器現實生活中的操作更

然後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 

所以呈現局部 ,如果你想改變你改變視圖
如果你想改變收集過程的行爲你改變控制器
如果你想改變對象的行爲喲ü改變模型

同樣的事情,與錯誤
都嚴格順序
的順序是善與美

+0

好的,明白。 我想再提一點建議。 如果我的控制器中有一個實例變量,它在'new'操作中設置,我可以在我的視圖'new.html.erb'中使用它。但是,如果用戶面臨驗證錯誤,他將被重定向到我的控制器中的「創建」操作,我必須再次設置實例變量。它發生在我在collection_select助手中使用我的實例變量時。 有沒有辦法避免這種重複? (這是我試圖直接在我的視圖中使用模型的主要原因...) – Syph3R

+0

原因在RESTFULL模式中,您無法直接在視圖中獲取響應。你喊新的參數,並從創建行動中獲取響應。你必須這樣做,因爲它在RESTFULL範式中是正確的。 – antiqe

+0

在其他情況下你可以直接使用模型,但它是php-way不是rails-way 它不是嚴格的規則,它是一個建議讓生活更完美 – antiqe

0

從技術上講,你可以,你的用戶模型只是一個Ruby類,並且是從你的觀點接近。但是,這絕對不是一個好的做法。

與其不斷探討爲什麼不應該這樣做,我只會鏈接到一些文章/文檔,並建議您在移動之前首先了解MVC體系結構背後的原因。進一步到Rails:

+0

謝謝你的文章,將是有益的:) – Syph3R

0

INTERAC的想法與ActiveRecord的查詢接口只從控制器內部操作是可維護性。如果你遵循這個方法,你可以通過查看它的控制器大致瞭解應用程序應該做什麼。此外,如果邏輯變得更加複雜(例如,您想添加身份驗證和/或授權),則該行爲將進入控制器。

相反,如果你看一下你的觀點之一,它應該清楚的頁面的外觀。如果有呼籲模擬整個地方的課程,這是不明顯的。

也許,你可以認爲它是這樣的:

  • 型號:複雜的查詢,驗證,回調來滿足您的業務邏輯
  • 控制器:正在上映什麼/創建/更新/等。誰允許這樣做。
  • 查看:請問我的網頁看起來視覺

如果你想改變你的應用程序的某一方面,你應該只需要觸摸負責一個方面的respecitve組件。

0
  • 型號:一切做任何形式的邏輯分析和數據維護
  • 控制器:??應該只是分析請求,並deside應該問什麼模型,以什麼方式數據(所有數據都只有一個字段.. 。另外:我是否管理? )
  • 查看:從控制器獲取的數據中的可視化表示

所以是的,它是可以移動的一切來查看(甚至數據庫請求),但它不是好主意,在理想情況下,你應該將它移動到控制器