11

我得到了一個新手問題。我試圖將我的視圖中的變量傳遞給我的控制器。無論如何,我的控制器中的方法可以從我的視圖中接收變量嗎?將視圖中的參數傳遞給控制器​​

Post view: show.html.erb: 
.... 
<%=link_to "Add relationship", :method => :add_relationship(@rela) %> 

Controller: post.controller.rb: 

def add_relationship(rela) 
    @post = Post.find(params[:id]) 

    if current_user.id == @post.user_id 
    @post.rel_current_id = rela.id 
    @post.save 
    redirect_to relationships_url 
    else 
    redirect_to posts_url, :notice => "FY!" 
    end 
end 

感謝提前:)

+0

你可以使用'params'散... – Jon

+0

它取決於變量的類型。你不能將對象傳遞給控制器​​。你可以通過簡單的參數來定義它在一個隱藏的標籤 – adcosta

+0

我實際上只想改變我的模型中的id到當前頁面的id。 我的頁面有一個ID,這就是爲什麼我試圖通過該模型。如果我想從我的頁面傳遞參數並將其保存在我的發佈模型中(使用我的發佈控制器)。我會怎麼做? 就像「點擊此鏈接」,這將改變ID。 <%= link_to「更改ID」,:method => add_relationship,params [:rel_current_id = @ rela.id] – OXp1845

回答

23

您可以通過link_to將信息添加到params散列。我不知道究竟你正在嘗試做的,但我沒有這樣的事情最近,當我鏈接到新的電子郵件

<%= link_to 'Send Thanks', new_invoice_email_path(@invoice, :type => "thanks") %> 

現在我的PARAMS看起來添加電子郵件我想要的類型,如:

{"type"=>"thanks", "action"=>"new", "controller"=>"emails", "invoice_id"=>"17"} 

我可以通過params

email_type = params[:type] 

而不是一個字符串的訪問類型,如果你的實例變量@rela傳遞你會得到params哈希表的OBJECT_ID。

每下面的評論,我將我的路線說明爲什麼new_invoice_email_path工作路徑:

resources :invoices do 
    resources :emails 
end 
+0

是的,這是我正在尋找的東西對於。 new_invoice_email_path是你的控制器還是方法? Pfft,我真的需要更多地瞭解這一點。我比ruby更習慣JAVA ... – OXp1845

+0

這條路線把我帶到電子郵件控制器,新的行動。電子郵件是發票的嵌套路線,我會將我的路線添加到我的答案上面 – Steve

+0

打開命令提示符並鍵入'rake routes'以查看您擁有哪些定義的路線。它還會告訴你它映射到的控制器和動作。 –

2

當收到請求時,所述控制器(和任何模型調用)將被處理的第一,然後視圖代碼被最後處理。視圖可以調用助手中的方法,但不能在控制器中引用函數。

但是,一旦呈現頁面,您可以將信息作爲新請求的一部分發回控制器,或者使用ajax/JQuery(等)遠程調用控制器函數。

這是否幫助?

+0

對不起,ajax對我來說有點複雜:) – OXp1845

相關問題