Ruby On Rails:使用带有link_to的数组

时间:2009-09-21 10:09:39

标签: ruby-on-rails

我很好奇如何在rails中的ruby中的link_to方法中使用数组,例如:

控制器:

def index
    @test = [1,2,3]
end

查看:

 <%= link_to "test", {:action => 'index'}, :test => @test %>

在查看源代码时,我最终得到的结果是:

<a href="/index/" test="123">test</a>

我的猜测是,调用数组的to_string或类似内容来设置html中test的值。

我的目标是能够拥有一个表单,人们可以在页面上提交数据,然后一旦他们提交了数据并返回页面,如果他们点击链接,数据将通过点击持续存在在链接上。

*理想情况下,我想这样做而不必传递网址中的参数。

谢谢。

4 个答案:

答案 0 :(得分:2)

如果您想保留数据,则应该使用Cookie。它们非常易于使用,只需在操作中指定以下值:

cookies[:some_key] = "some value"

并使用以下方法检索它:

cookies[:some_key] # returns "some value"

但是,只是为了澄清你的例子中link_to正在做什么:

<%= link_to "test", {:action => 'index'}, :test => @test %>
     

在查看源代码时,我最终得到的结果是:

<a href="/index/" test="123">test</a>

原因是你将@test传递给link_to中的第三个参数,这是一个html属性的哈希值,因此它变成了一个。要使它成为链接上的参数,您需要使用第二个传递它,例如{:action => 'index', :text => @test}。但是,如上所述,这不一定是解决此问题的最佳方法,此外,通常最好还将控制器名称传递给link_to,或者更好的是,使用命名路由。

答案 1 :(得分:1)

我的猜测是它正在使用Array#join。

您可以尝试类似

的内容
:test => @test.join( ',' )

然后解析控制器中的字符串。但如果用户输入您选择作为分隔符的相同字符,则有些容易出错。

但是,假设链接页面也由Rails提供,我认为最好的解决方案是使用flash区域将结果存储在服务器上

flash[ :submitted_params ] = params;

并在链接页面的控制器中

old_params = flash[ :submitted_params ] || {}

答案 2 :(得分:1)

如果我理解得很清楚,您希望在用户验证表格后保留用户提交的数据吗? 如果没有任何代码行,那么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 %>

当表单无法验证时,“名称”文本字段会自动获取先前输入的数据。

如果之后仍需要重新加载数据,则无需将它们作为参数添加到链接标记中。 您可以在控制器中获取对象,并将其数据传递到显示它的视图。

答案 3 :(得分:1)

我只想编写一个视图助手,将其格式化为带有良好分隔符的字符串,如逗号。

这不是传递信息的好方法。改为尝试会话变量,cookie或url编码的变量。

与您正在进行的操作的最佳匹配将是url编码的变量,它们将以与此类似的形式显示:

<a href="/index/?test=123">test</a>