ruby on rails:在选择/下拉框中加载具有默认值的页面

时间:2010-01-06 19:51:04

标签: ruby-on-rails

对rails很新。我正在做一个简单的书店应用程序。我们有不同的学科领域,如物理,化学,哲学等......每个学科领域都有一些书籍。以 book / list 结尾的网址将列出所有图书,不论主题区域如何。主题区域也与超链接显示在同一页面中。以 book / show_subject /< subject id> 结尾的网址列出了具有该主题ID的所有图书。如果我想查看属于该主题区域的书籍,请点击该主题。书籍/列表页面确实有一个指向我们可以添加新书的页面的超链接( book / new )。

假设如果没有该主题的书籍(比如物理学),我会显示一个链接,说你想在这里添加书籍吗?单击它会转到我输入书籍信息的页面+书籍所属的主题区域(书籍/新)。我有一个主题区域的下拉菜单...如何配置此下拉菜单以显示物理最初,(因为我注意到商店中没有物理信息后导航到此页面)。

2 个答案:

答案 0 :(得分:0)

一个选项可以是使链接指向

/book/new?book_subject_id_=1

并使用以下行接收控制器中的选择:

class BookController < #...
   def new
     @book = Book.new(:subject_id => params[:book_subject_id])
     #...
   end
   #...
end

将使用您选择的主题创建Book AR对象。

然后在您的视图中,表单将被定义为接受@book,例如:

<% form_for @book, :url => your_create_url, :method => { :post } do %>
  <%= f.collection_select :subject_id, Subject.all.map{|s| [s.name, s.id]} %>
...

重要的是调用book对象上的subject_id方法,以便检索在请求中设置的值。

这样选择将选择物理主题

(注意:以下rails约定书应该是控制器和URL中的书籍)

答案 1 :(得分:0)

通常,您可以通过向GET请求添加参数来执行此操作。您可以通过以下方式将其添加到链接中:

link_to new_book_path, :default_subject => @subject.name

然后在控制器操作中,将参数分配给新对象:

class BookController < ActiveRecord
  ...
  def new
     @book = Book.new
     if param[:default_subject]
       @book.subject = Subject.find_by_name(param[:default_subject])
     end
  end
  ... 

您根本不需要更改表单,因为它将使用@book对象来指定默认值(如果您使用的是普通表单标记助手)。例如:

<% form_for @book do |form| %>
  <%= form.collection_select :subject_id, Subject.all, :id, :name %>
  .. other fields ..
<% end %>