如何让Rails select()工作?

时间:2011-06-06 17:24:59

标签: ruby-on-rails ruby forms

我在托管服务器上运行Rails 2.3.5,无法升级到3。

我有一个数据库,它有一个包含iddatetitle的漫画列表。我可以使用文本链接浏览它们,我也希望能够使用下拉列表select进行导航,但我无法使select标记生效。这不是创建新元素的表单。鉴于form显示(为空),select标记不会显示,甚至不会显示空select标记。

这就是我所拥有的:

* comics_controller.rb *

class ComicsController < ApplicationController
  before_filter :get_all_comics

  def get_all_comics
    @comics=Comic.find(:all, :order => "date DESC")
  end

  def view
    if params[:id].nil?
    @comic=@comics.first
    @prev=@comics[1]
    else
        @comic=Comic.find(params[:id])
        @prev=Comic.find(:first, :conditions => ["date < ?", @comic.date],
                             :order => "date DESC")
        @next=Comic.find(:first, :conditions => ["date > ?", @comic.date],
                                 :order => "date ASC")
    end
  end

end

漫画/ view.html.erb

<% form_for :comics, :url => { :action => "view" } do |f|
    f.select(:id,Comic.all,:prompt => true)
end %>
<img src="directory/<%= @comic.filename %>" />
<p class="title"><%= @comic.title %></p>
<p class="date"><%= @comic.date %></p>
<% unless @prev.nil? %>
    <a href="<%= @prev.id %>">Previous</a>
<% end
   unless @next.nil? %>
    <a href="<%= @next.id %>">Next</a>
<% end %>

3 个答案:

答案 0 :(得分:3)

这里的基本问题是你正在使用的块标签。

Rails使用两种类型的模板标记:<%=用于任何应该评估并返回给客户端的标记,而<%将用于不返回任何内容的控制语句给客户。

另请注意,使用<%=输出的Rails 2中的任何内容都不会安全地转义,您可能应该使用<%= h @comic.title %>(h用于html转义)。但是,如果您在Rails 3中使用普通<%=语法,它将为您处理转义。

如果您从头开始学习框架,那么最好转到Rails 3。

答案 1 :(得分:1)

<% form_for ... do |f| %>
<%= f.select(...) %>
<% end %>

修改:我建议您在某处添加<%= submit_tag %>

答案 2 :(得分:0)

我认为您使用的集合需要一些格式化

f.select :id, Comic.all, :prompt => true

f.select :id, Comic.all.map { |c| [c.title, c.id] }, :prompt => true

# collection should resemble this format
[
  ["Batman", 1],
  ["Superman", 2],
  ...
]