2014-03-01 46 views
0

我正在使用Rails 3.2。Rails表格的初學問題

我試圖製作一個表格,允許用戶輸入他們想要比較的學院,以及他們想要查看的比較標準。這是我的代碼。當我提交表單時,它會重定向回頁面,但不會顯示h1標籤中的參數。怎麼了?

控制器

class ComparisonController < ApplicationController 
    def view 
    @summaries = Summary.all 
    @colleges = College.all 
    end 

    def update 
    @college_listing = params[:comparison][:college] 
    @summary_listing = params[:comparison][:section] 
    redirect_to '/comparison', college_listing: "#{@college_listing}", summary_listing: "#{@summary_listing}", notice: 'Showing comparison.' 
    end 
end 

查看

<%= simple_form_for :comparison, :url => '/comparison/update' do |f| %> 
    <%= f.input :college, collection: ['University of Pittsburgh', 'University of Wisconsin - Madison', 'Colgate', 'Adelphi'], :input_html => { :multiple => true } %> 
    <%= f.input :section, collection: ['Professors', 'Classes', 'Difficulty', 'Campus', 'Food', 'Dorms', 'Safety', 'Social Atmosphere', 'Parties', 'Actuarial Science', 'Agriculture', 'Applied Math', 'Astronomy', 'Biology', 'Chemistry', 'Computer Science', 'Earth Science', 'Geology', 'Linguistics', 'Mathematics', 'Neuroscience', 'Physics', 'Statistics', 'Anthropology', 'Criminology', 'Economics', 'History', 'Political Science', 'Psychology', 'Sociology', 'Urban Studies', 'Women\'s Studies', 'Art', 'Classics', 'English', 'Film', 'History and Philosophy of Science', 'Literature', 'Music', 'Philosophy', 'Religious Studies', 'Theatre', 'African', 'Chinese', 'French', 'German', 'Italian', 'Japanese', 'Jewish', 'Latin American', 'Middle Eastern', 'Russian', 'Spanish', 'Other', 'Accounting', 'Finance', 'Management', 'Marketing', 'Bioengineering', 'Chemical', 'Civil', 'Computer', 'Electrical', 'Engineering Science', 'Industrial', 'Materials Science and Engineering', 'Mechanical', 'Nuclear', 'Architecture', 'Athletic Training', 'Communications/Journalism', 'Information Science', 'Nursing', 'Nutrition', 'Pharmacy', 'Public Health', 'Rehab Science', 'Social Work'], :input_html => { :multiple => true } %> 
    <%= f.button :submit %> 
<% end %> 

<h1><%= params[:college_listing] %></h1> 

<h1><%= params[:summary_listing] %></h1> 
+0

我笑Rails的響應。我做了Michael Hartl的「One Month Rails」和學習導軌教程。儘管如此:/ –

+0

我不明白。當我提交表單時,它會轉到更新操作。然後我必須使用可用的變量重定向到視圖操作。我如何使它們可用?視圖操作無法訪問提交的表單參數,所以我能想到的唯一方法是通過典型的url參數。 –

+0

@mbratch我試過'

<%= @college_listing%>

<%= @summary_listing%>

'在視圖中,但它不起作用。您是否說控制器中的所有實例變量都可用於所有控制器操作? –

回答

2

試試這個在您的控制器:

def update 
    @college_listing = params[:comparison][:college] 
    @summary_listing = params[:comparison][:section] 
    flash[:notice] = 'Showing comparison' 
    redirect_to :controller => 'comparison', :action => 'view', :college_listing => @college_listing, :summary_listing => @summary_listing 
end 

至於爲什麼它不工作之前 -

redirect_to具有以下特徵:

def redirect_to(options = {}, response_status = {}) 

當你與它的URL設置的選項哈希是你所傳遞的字符串和一切成爲response_status,不附加後的字符串叫它到url爲get params。

如果你想在redirect_to調用中傳遞flash通知,那麼你最好調用一個命名路由(運行rake routes找到到comparison#view的路由 - 它可能只是`comparison_url'。然後,你會制定你的呼叫是這樣的:

redirect_to comparison_url(:college_listing => @college_listing, :summary_listing => @summary_listing), :notice => 'Showing comparison' 

調用與parethesis將創建正確的get請求您的PARAMS comparison_url爲Rails重定向到 - 在這種情況下,你實際上是通過一個進程中redirect_to的

Rails代碼並不是所有這些都是令人恐懼的如果你看中了 - 這裏的redirect_tohttps://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_controller/metal/redirecting.rb

的各種方法,當你調用redirect_to的歸結爲私有方法_compute_redirect_to_location

+0

工作,謝謝!據我所知(我正在努力學習),你能解釋一下哪裏出了問題,爲什麼它以前不工作?另一個人幫助我,我們嘗試了一些foo測試,來自'redirect_to'的參數沒有被傳遞。 –

+0

此外,':後我添加'notice'不工作<%如果閃光[:通知]%>

<%= flash[:notice] %>
<% end %>'。你知道爲什麼嗎? –

+0

更新我的答案 - 對不起原來'notice'是錯的 - 它現在應該工作。希望解釋是有道理的,以及 – slapthelownote