对rails很新。我正在做一个简单的书店应用程序。我们有不同的学科领域,如物理,化学,哲学等......每个学科领域都有一些书籍。以 book / list 结尾的网址将列出所有图书,不论主题区域如何。主题区域也与超链接显示在同一页面中。以 book / show_subject /< subject id> 结尾的网址列出了具有该主题ID的所有图书。如果我想查看属于该主题区域的书籍,请点击该主题。书籍/列表页面确实有一个指向我们可以添加新书的页面的超链接( book / new )。
假设如果没有该主题的书籍(比如物理学),我会显示一个链接,说你想在这里添加书籍吗?单击它会转到我输入书籍信息的页面+书籍所属的主题区域(书籍/新)。我有一个主题区域的下拉菜单...如何配置此下拉菜单以显示物理最初,(因为我注意到商店中没有物理信息后导航到此页面)。
答案 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 %>