2013-03-07 42 views
2

在應用泛音動態渲染我的工作,我在模型中定義的方法task_types在Rails 3中

task.rb 
    def self.task_types 
["ad_hoc"] 
    end 

我用task_types填充一個下拉菜單,但我會也喜歡用它來動態渲染一個部分。

我想到的是,對於每種任務類型,都會有一個關聯的評論框。我繼續做賴以選擇任務類型的輔助,將調用正確的部分取決於:

#tasks_helper.rb 
module TasksHelper 

    def completion_comment(task) 
    task_types = @task.task_type 
    render :partial => "#{Task.task_types}", :locals => {:task => task} 
    end 
end 

不幸的是,當我叫completion_comment,我收到錯誤消息"The partial name (["ad_hoc"]) is not a valid Ruby identifier."

我正在尋找因爲是一種動態的方式來呈現適當的部分。我認爲我在正確的軌道上,但我不知道如何從我的task_types方法中提取數組元素(正如您可以在錯誤消息中看到的,括號和引號被拉入呈現操作中)。或者,也許我需要利用不同的方法來動態渲染局部。任何幫助表示讚賞。

+0

也許一個符號,而不是一個字符串的作品?試試':ad_hoc'而不是''ad_hoc'''。還是有一個字符串對象是重要的? ...哦,我看到:我認爲問題是陣列...: -/ – 2013-03-07 22:22:12

+0

同樣的問題(部分名稱([:ad_hoc])不是一個有效的Ruby標識符)...我想知道是否有一種方法可以在我的task_types定義中調用,或者是我必須做的事情,當我試圖渲染這個部分。 – aceofbassgreg 2013-03-07 22:25:08

+0

數組不能被接受爲部分名稱。 – 2013-03-07 22:30:02

回答

2

這裏是什麼工作:

module TasksHelper 

    def render_task_form(task) 
    render :partial => "/tasks/completed/#{task.task_type.downcase}" 
    end 
end 

我試過這個解決方案要早得多,並且有收到錯誤:「部分名稱(/ tasks/completed /)不是有效的Ruby標識符;請確保您的部分名稱以字母或下劃線開頭,後面跟隨任意字母,數字或下劃線的組合。

我又試了一次,爲了彌補這個問題,我從數據庫中刪除了所有的任務。現在局部呈現動態。希望這可以幫助別人!

0

您需要一個字符串,而不是整個task_types數組。 @task.task_type應返回a)與任務類型數組中的元素相匹配的鍵,並且b)匹配已知的部分。

以下是一個比較複雜,它需要,但應該做的伎倆:

tasks_helper.rb 
module TasksHelper 

    def completion_comment(task) 
    if Task.task_types.include? task.task_type 
     render :partial => task.task_type, 
       :locals => { 
       :task => task 
       } 
    else 
     # render a generic comment box here 
    end 
    end 
end 
+0

感謝您的幫助。你提供的代碼仍然給我整個數組,但我能夠找出一個有效的解決方案。 – aceofbassgreg 2013-03-08 20:00:06

0

在Rails 4中,視圖或部分名稱應該響應一個有效的Ruby標識符。 因此,整個視圖名稱必須遵循相同的格式紅寶石標識符:

  • ,應以啓動_或字符
  • 它不能以數字開頭
  • 它只能有_和字母數字。

因此,考慮到task_type是一個有效的ruby標識符(它應該是),它將起作用。在生成該代碼將無法在軌道4,5

render '/tasks/completed/some-task' 

工作,但是這將工作

render '/tasks/completed/some_task' # note the underscore.