Ruby on rails RubyonRails:使用带有链接的数组
我很好奇如何在ruby on rails中使用link_to方法中的数组,例如: 控制器:Ruby on rails RubyonRails:使用带有链接的数组,ruby-on-rails,Ruby On Rails,我很好奇如何在ruby on rails中使用link_to方法中的数组,例如: 控制器: def index @test = [1,2,3] end 视图: 'index'},:test=>@test%> 当我看源代码的时候,我最终得到的结果是: <a href="/index/" test="123">test</a> <a href="/index/" test="123">test</a>
def index
@test = [1,2,3]
end
视图:
'index'},:test=>@test%>
当我看源代码的时候,我最终得到的结果是:
<a href="/index/" test="123">test</a>
<a href="/index/" test="123">test</a>
我的猜测是数组的to_字符串或类似的东西被调用来设置html中test的值
我的目标是能够有一个表单,人们可以在页面上提交数据,然后一旦他们提交了数据并返回到页面,如果他们点击链接,数据将通过点击链接保持不变
*理想情况下,我希望这样做而不必在url中传递参数
谢谢。我猜它正在使用数组#join 你可以试试类似的东西
:test => @test.join( ',' )
然后解析控制器中的字符串。但如果用户输入与您选择的分隔符相同的字符,则有点容易出错
但是,假设链接页面也由Rails提供服务,我认为最好的解决方案是使用flash区域将结果存储在服务器上
flash[ :submitted_params ] = params;
在链接页面的控制器中
old_params = flash[ :submitted_params ] || {}
我猜它正在使用数组#join 你可以试试类似的东西
:test => @test.join( ',' )
然后解析控制器中的字符串。但如果用户输入与您选择的分隔符相同的字符,则有点容易出错
但是,假设链接页面也由Rails提供服务,我认为最好的解决方案是使用flash区域将结果存储在服务器上
flash[ :submitted_params ] = params;
在链接页面的控制器中
old_params = flash[ :submitted_params ] || {}
如果我理解得很清楚,您希望在用户验证表单后保留用户提交的数据吗?
Rails能够做到这一点,而不需要任何代码行 基于您拥有路由资源“对象”的假设
在控制器中:
def edit
@object = Object.find_by_id params[:id]
end
def update
@object = Object.find_by_id params[:id]
if @object.update_attributes params[:object]
# The datas have been successfully saved. You redirect wherever you want to.
else
render :action => 'edit'
end
end
在你看来:
<% form_for @object do |f| %>
<%= text_field :name %>
<% end %>
当表单无法验证时,“名称”文本字段将自动获取以前输入的数据
如果在此之后仍然需要重新加载数据,则不需要将它们作为参数添加到链接标记中。
您在控制器中获取对象,并将其数据传递到您显示它的视图。如果我理解得很清楚,您希望在用户验证表单后保留用户提交的数据吗?
Rails能够做到这一点,而不需要任何代码行 基于您拥有路由资源“对象”的假设
在控制器中:
def edit
@object = Object.find_by_id params[:id]
end
def update
@object = Object.find_by_id params[:id]
if @object.update_attributes params[:object]
# The datas have been successfully saved. You redirect wherever you want to.
else
render :action => 'edit'
end
end
在你看来:
<% form_for @object do |f| %>
<%= text_field :name %>
<% end %>
当表单无法验证时,“名称”文本字段将自动获取以前输入的数据
如果在此之后仍然需要重新加载数据,则不需要将它们作为参数添加到链接标记中。
您可以在控制器中获取对象,并将其数据传递到显示它的视图。我只需编写一个视图帮助程序,将其格式化为具有良好分隔符(如逗号)的字符串 但这不是传递信息的好方法。请尝试会话变量、cookie或url编码的变量 与您正在执行的操作最匹配的是url编码的变量,它将以类似以下的形式显示:
<a href="/index/?test=123">test</a>
我只需编写一个视图帮助程序,将其格式化为带有良好分隔符(如逗号)的字符串 但这不是传递信息的好方法。请尝试会话变量、cookie或url编码的变量 与您正在执行的操作最匹配的是url编码的变量,它将以类似以下的形式显示:
<a href="/index/?test=123">test</a>
如果您想保留数据,可能应该使用cookie。它们非常易于使用,只需在操作中使用以下内容指定一个值:
cookies[:some_key] = "some value"
并使用以下命令检索它:
cookies[:some_key] # returns "some value"
但是,为了澄清在您的示例中,link\u to
在做什么:
'index'},:test=>@test%>
当我看源代码的时候,我最终得到的结果是:
<a href="/index/" test="123">test</a>
<a href="/index/" test="123">test</a>
原因是您正在将@test传递给
link\u to
中的第三个参数,这是html属性的散列,因此将其转换为散列。要使其成为链接上的一个参数,需要将其与第二个参数一起传递,例如,{:action=>'index',:text=>@test}
。但是,如上所述,这不一定是解决此问题的最佳方法,此外,通常最好也传递控制器名称以链接到或更好地使用命名路由。如果您想保留数据,您可能应该使用cookie。它们非常易于使用,只需在操作中使用以下内容指定一个值:
cookies[:some_key] = "some value"
并使用以下命令检索它:
cookies[:some_key] # returns "some value"
但是,为了澄清在您的示例中,link\u to
在做什么:
'index'},:test=>@test%>
当我看源代码的时候,我最终得到的结果是:
<a href="/index/" test="123">test</a>
<a href="/index/" test="123">test</a>
原因是您正在将@test传递给
link\u to
中的第三个参数,这是html属性的散列,因此将其转换为散列。要使其成为链接上的一个参数,需要将其与第二个参数一起传递,例如,{:action=>'index',:text=>@test}
。但是,如上所述,这不一定是解决此问题的最佳方法,此外,通常最好也将控制器名称传递给link_,或者更好地使用命名路由。能否更具体一些?必须提交什么样的数据?只是一个字符串或数字的列表?是的,我正在尝试传递一个只包含字符串和数字的数组。您能更具体一点吗?必须提交什么样的数据?只是字符串或数字的列表?是的,我正在尝试传递一个只包含字符串和数字的数组。