Ruby on rails Rails 3中部分的动态渲染
在我正在开发的应用程序中,我在模型中定义了一个方法Ruby on rails Rails 3中部分的动态渲染,ruby-on-rails,dynamic,rendering,render,partial-views,Ruby On Rails,Dynamic,Rendering,Render,Partial Views,在我正在开发的应用程序中,我在模型中定义了一个方法task\u types: task.rb def self.task_types ["ad_hoc"] end 我使用task\u types来填充下拉菜单,但我也希望使用它来动态渲染局部 我想的是,对于每种任务类型,都会有一个相关的注释框。我接着做了一个助手,它将根据选择的任务类型调用正确的分部: #tasks_helper.rb module TasksHelper def completion_comment(task)
task\u types
:
task.rb
def self.task_types
["ad_hoc"]
end
我使用task\u 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\u comment时,我收到了错误消息“部分名称([“ad\u hoc”])不是有效的Ruby标识符。”
我要寻找的是一种动态的方式来渲染适当的局部效果。我认为我的思路是正确的,但我不确定如何从我的
任务类型
方法中提取数组元素(正如您在错误消息中看到的,括号和引号被拉入渲染操作)。或者,我可能需要使用另一种方法来动态渲染局部。非常感谢您的帮助。您需要一个字符串,而不是整个任务类型@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
以下是有效的方法:
module TasksHelper
def render_task_form(task)
render :partial => "/tasks/completed/#{task.task_type.downcase}"
end
end
我早就尝试过这个解决方案,但收到一个错误:“部分名称(/tasks/completed/)不是有效的Ruby标识符;请确保部分名称以字母或下划线开头,后面是字母、数字或下划线的任意组合。”
我再试了一次,为了解决这个问题,我删除了数据库中的所有任务。现在,部分将动态渲染。希望这对其他人有帮助 在Rails 4中,视图或部分名称应该响应有效的Ruby标识符。
因此,整个视图名称必须采用与ruby标识符相同的格式:
- 它应该以u或字符开头
- 它不能以数字开头
- 它只能有u和字母数字
因此,考虑到task_类型是一个有效的ruby标识符(它应该是),它将起作用。在生成中,此代码在Rails 4中不起作用
render '/tasks/completed/some-task'
但这会奏效的
render '/tasks/completed/some_task' # note the underscore.
如果字符串起作用,可能是一个符号?尝试:即席而不是“即席”
。或者有一个字符串对象很重要吗。。。哦,我明白了:我认为问题在于阵列…:-/同样的问题(部分名称([:ad_hoc])不是有效的Ruby标识符)…我想知道是否有一个方法可以在我的task_类型定义中调用,或者这是我在试图呈现部分时必须做的事情。数组不能被接受为部分名称。@ValeryKvon-是,这就是我遇到的问题…我想传递数组的元素,而不是数组本身,但我不确定应该如何进行。如果我必须改进我的整个方法,那很好。你是什么意思:传递数组的元素,比如什么?谢谢你的帮助。您提供的代码仍然为我提供了整个阵列,但我找到了一个可行的解决方案。