我有兩個模型User
和Want
。 A User
has_many:
Want
s。Rails-在另一個控制器中驗證模型並保留錯誤
Want
模型除了user_id
之外還有一個屬性,那就是name
。
在edit
動作視圖UsersController
有兩種形式。一個POST(PUT)更新用戶的UsersController
更新方法,另一個POST更改爲WantsController
create
操作,以向用戶的帳戶添加新的Want
。
這是很好,我有工作,但...
在WantsController
我重定向回UsersController
的edit
行動表達成功或Want
驗證錯誤的create
作用。
問題是編輯操作爲表單創建了一個新的@want,並且驗證錯誤在請求中丟失。
退房在UsersController
的create
行動:
def create
@want = current_user.wants.build(params[:want])
if @want.save
flash[:success] = "WANT created!"
redirect_to user_account_path current_user.username
else
#flash[:validation] = @want.errors <- I NEED THESE ERRORS FOR MY VIEW
redirect_to user_account_path current_user.username
end
end
和UsersController
的編輯動作:
def edit
@want = @user.wants.build
super
end
因爲WantsController
重定向我失去了對@want
實例變量的錯誤。我可以將錯誤存儲在flash
(如註釋中所示),但肯定這是完全濫用flash
。
所以我的問題是,我如何堅持這些錯誤橫跨動作,所以我可以在我的視圖中呈現Want
驗證錯誤?
此外,這是否被認爲是Rails約定的驗證?似乎有點矯枉過正創建一個全新的頁面,以便用戶可以添加一個單一的字符串屬性!
謝謝。
爲什麼不只是存儲的錯誤在其他類變量,像'@latest_errors = @ want.errors' –
的瓦爾不會被保留到了該請求,這是個問題。 –
我的意思是類變量(@@ latest_errors而不是@latest_errors),它們在開發環境中並不保留狀態,而是在生產中保留狀態。如果你願意,你也可以在開發中更改這個配置。只需更改開發配置文件(config/environments/development.rb),如下所示:'config.cache_classes = true' –