2010-10-29 65 views
0

因此,每個Rails項目我似乎遇到了這個問題,將是很感激,如果有人能賜教:如何訪問部分中的驗證消息?

與「正常」設置當窗體坐在馬上與URL /控制器相關的觀點是非常簡單,失敗的render => :action將顯示驗證消息。

現在我有一個局部坐在一個頁面的形式,其網址/控制器是一個show /:id,而不是表單的創建動作,驗證啓動但我無法獲取驗證消息顯示因爲我無法觸發正確的渲染動作... CLosest我得到的是一個渲染=> @object,但沒有CSS /佈局,我可以傳遞一個消息通過重定向與閃光燈[],但它感覺不對,同樣與jQuery的/客戶端錯誤消息...

那麼我怎麼能「乾淨地」顯示部分窗體(在另一個控制器/操作比父頁面)的驗證消息?

(在此先感謝您的幫助)

編輯:現在不能粘貼實際的事情,但我會盡我所能來解釋

我有一個主網頁例如article/show/01,在這個頁面上是文章的內容(@article),然後在頁面的底部是一個部分_commentform和一個表單來發表評論。此表單綁定到不同控制器(評論控制器)的創建操作。

現在,如果形式是在其自己的「頁面」/URL,而不是局部的,說/評論/創建,我會做強制:

if @comment.save 
redirect_to @comment 
else 
render => :create 
end 

和驗證將正常顯示。

在我的情況下,表單在文章/ show/01網址中部分顯示,應該與上面的代碼等效,以便驗證失敗錯誤消息顯示在父網址上,例如「呈現文章/ show/01「? 我相信這很容易,但我不能得到它的工作(我只是可以重定向的成功,但不能用渲染顯示錯誤)

回答

0

我不認爲顯示驗證錯誤的最佳方式是呈現部分。

恕我直言,最好和乾淨的方式來顯示錯誤消息使用styles/css你或你的webdesigner想要的是通過在FormBuilder中實現自己的error_messages方法。

例如,這裏是我爲最新項目實現的error_messages方法。

這裏是將輸出UL /李的一些自定義的樣式錯誤列表... 只需定製這一點,並把你的表單設計器應用程序/傭工的例子...

class StandardBuilder < ActionView::Helpers::FormBuilder 
    def error_messages 
    return unless object.respond_to?(:errors) && object.errors.any? 

    errors_list = "" 
    errors_list << @template.content_tag(:span, "There are errors!", :class => "title-error") 
    errors_list << object.errors.full_messages.map { |message| @template.content_tag(:li, message) }.join("\n") 

    @template.content_tag(:ul, errors_list.html_safe, :class => "error-recap round-border") 
    end 
end 

然後在我的表單:

= form_for @post, :builder => StandardBuilder do |f| 
    = f.error_messages 
    ... 

無需顯示/呈現另一個部分。就這樣 :)。

+0

您好,感謝您的回答,我不是想在局部做顯示驗證錯誤,它只是在本身的形式是在部分我只是想以簡單/標準的方式顯示驗證錯誤。不知道我完全理解你的方法,但它仍然需要渲染的形式部分dsiplay此自定義消息,我卡住,因爲我不能這樣做... – Monza 2010-10-29 08:55:38

+0

我不明白你的問題。你的意思是你所有的表單都是局部的,你想在別處訪問你的驗證錯誤?請主要/粘貼您的主頁和您的表格部分。謝謝。 – 2010-10-29 09:19:38

+0

我編輯了原始帖子以包含更多詳細信息。謝謝! – Monza 2010-10-29 09:44:09

0

如果要顯示的局部任何東西(包括錯誤消息)有兩種方式

1 - 將消息傳遞作爲參數的 - 在控制器動作,其中該部分被稱爲 2定義它局部

1 - 實施例

in your controller/action 

if @comment.save 
redirect_to @comment 
else 
@messages = "This is a message" 
render => :create 
end 

in your partial 

you can access the @message variable 

2 - 傳遞變量到部分

render :partial => 「<partial name>」, :locals => { :param1 => 「value」} 

<partial name> – name of your partial (Ex /partials/footer) 

:params1 – parameter name 

「value」 – value 

希望這有助於

感謝

sameera