我是一个构建我的第一个应用程序的rails新手。 到目前为止,我已经学到了很多东西,但是当我单击特定产品链接时,我一直在尝试使用相同的视图并使用数据库中的信息填充它的问题。
到目前为止,我有一个产品数据库。 在我的网站的首页上,我列出了所有产品。 在此列表中,每个产品的名称都是指向产品详细信息页面的链接。
问题是有很多产品,它们都有相同的详细信息,所以无论单击哪个产品链接,我都想对详细信息页面使用单个视图。 基本上,我需要一种方法来告诉我的"产品详细信息"控制器单击了哪个链接,以便它可以通过模型从产品数据库中检索正确的信息并将其传递给视图......我似乎找不到一种方法来做到这一点,我已经找了好几天了。
从本质上讲,我有很多链接想要转到同一页面,但根据哪个链接将您带到那里,该页面的显示方式不同。 如果单击"产品 1"链接,则会转到顶部包含"产品 1"和该产品详细信息的页面。 如果单击"产品 2",则会转到包含产品 2 等标题和详细信息的相同页面。
我意识到我可以为每个链接创建一个视图和路线,但这似乎很愚蠢,特别是如果我有 10,000 个产品!
非常感谢建议,谢谢!
相关代码如下。
页面控制器:
class PagesController < ApplicationController
def welcome
end
def front
@securities = Security.find_securities
end
def userdetail
end
def securitydetail
@securitynumber = params[:id]
end
end
首页视图,其中列出了产品并链接到详细信息页面...
<center><h2>FRONT PAGE</h2></center><div align=right><p><%= link_to "logout", :action => "welcome"-%></p></div>
<p>listing of available securities</p>
<p>
<% for security in @securities -%>
<div class="entry">
<h3><%= h link_to security.name, :action => "securitydetail" %></h3>
<%= h security.description %>
<div class="circulation">
<span class="shares"><%= h security.shares %> Shares</span>
</div>
</div>
<% end -%>
"产品详细信息"视图,我暂时只是尝试为每个产品显示一个唯一 ID。 该变量来自页面控制器安全详细信息操作。
<h1><%= @securitynumber -%></h1>
最后,以下是首页和详细信息页之间的路由:
MarketVer2Apr2014::Application.routes.draw do
get "listing/index"
resources :securities
get "pages/welcome"
get "pages/front"
#get "pages/userdetail"
get "pages/securitydetail"
root 'pages#welcome'
get 'pages/front' => 'pages#front'
#get 'pages/userdetail' => 'pages#userdetail'
get 'pages/securitydetail' => 'pages#securitydetail'
我得到了所有的路由,但需要获取哪个链接被点击到我的控制器的信息......
您的产品应具有自己的产品模型、控制器和视图。 您的产品控制器与七个黄金休息动作。 显示控制器包含用于呈现单个产品的信息
class ProductsController < ApplicationController
def new
end
def create
end
def show
@product = Product.find(params[:id])
end
def edit
end
def update
end
def index
end
def destroy
end
end
然后,您可以在views/products/show.html.erb
中查看要显示的任何信息,例如产品名称。 Rails 将为每个产品呈现相同的视图。
<div class="name">
<%= product.name %>
</div>
您应该查看 Rails 路由指南:http://guides.rubyonrails.org/routing.html