我很好奇如何在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的值。
我的目标是能够拥有一个表单,人们可以在页面上提交数据,然后一旦他们提交了数据并返回页面,如果他们点击链接,数据将通过点击持续存在在链接上。
*理想情况下,我想这样做而不必传递网址中的参数。
谢谢。
答案 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>