我在托管服务器上运行Rails 2.3.5,无法升级到3。
我有一个数据库,它有一个包含id
,date
和title
的漫画列表。我可以使用文本链接浏览它们,我也希望能够使用下拉列表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 %>
答案 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],
...
]