Ruby on rails RubyonRails:使用带有链接的数组

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>

我很好奇如何在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>

我的猜测是数组的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_,或者更好地使用命名路由。

能否更具体一些?必须提交什么样的数据?只是一个字符串或数字的列表?是的,我正在尝试传递一个只包含字符串和数字的数组。您能更具体一点吗?必须提交什么样的数据?只是字符串或数字的列表?是的,我正在尝试传递一个只包含字符串和数字的数组。