2009-09-21 22 views
1

我是如何在Ruby on Rails的使用數組中的link_to方法例如好奇:Ruby on Rails的:使用數組與的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中設置測試的值。

我的目標是能夠有一種表單,人們可以在頁面上提交數據,然後一旦他們提交了數據並返回到頁面,如果他們點擊鏈接數據將持續通過點擊鏈接。

*理想情況下,我想這樣做,而不必在URL中傳遞參數。

謝謝。

+0

你能更具體嗎?必須提交什麼樣的數據?只是一串字符串或數字? – giorgian 2009-09-21 10:34:34

+0

是的,我試圖傳遞一個只包含字符串和數字的數組。 – Evan 2009-09-25 04:09:36

回答

2

如果你想保持你應該使用cookies數據。他們是非常容易使用,只是在動作如下分配一個值:

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

我的猜測是它使用Array#join。

你可以嘗試像

:test => @test.join(',') 

,然後分析在控制器的字符串。但是,如果用戶輸入您選擇的分隔符相同的字符,則容易出錯。

但是,假設鏈接的頁面也被Rails的服務,我認爲最好的辦法是使用閃存區域的結果存儲在服務器

flash[ :submitted_params ] = params; 

上,並在控制器的鏈接頁面

old_params = flash[ :submitted_params ] || {} 
1

如果我沒有理解好了,你想保留用戶提交的DATAS他們驗證後的形式?
沒有任何你需要的代碼行,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 %> 

當表單無法驗證,該「名稱」文本字段自動獲取先前輸入的數據。

如果在此之後仍然需要重新加載數據,則不需要將它們作爲參數添加到鏈接標記中。 您在控制器中獲取對象並將其數據傳遞到顯示它的視圖。

1

我只會寫一個視圖助手,它將其格式化爲帶有良好分隔符的字符串,如逗號。

雖然這不是傳遞信息的好方法。改用會話變量,cookie或url編碼的變量。

你在做什麼是URL編碼變量,這將在一個類似的形式顯示出來的最佳匹配:

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