初学者遇到Rails形式的麻烦

时间:2014-03-01 01:26:07

标签: ruby-on-rails ruby-on-rails-3 forms ruby-on-rails-3.2

我正在使用Rails 3.2。

我正在尝试创建一个表单,允许用户输入他们想要比较的学院,以及他们想要比较的标准。这是我的代码。当我提交表单时,它会重定向回页面,但不会在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>

1 个答案:

答案 0 :(得分: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的字符串调用它时,它将options hash设置为你传入的字符串,之后的所有内容都成为response_status,并且不会作为get params附加到url。

如果你想在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中使用params调用comparison_url将创建正确的get Rails重定向到的请求 - 在这种情况下,您实际上是将proc传递给redirect_to。

如果您喜欢,Rails代码并不是那么令人生畏的代价 - 这里是redirect_to https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_controller/metal/redirecting.rb

当您调用redirect_to时,Rails响应的各种方式归结为私有方法_compute_redirect_to_location

相关问题