我正在创建一个学生列表,当我单击一个超链接时,我想显示一个带有我单击的学生信息的表。
我正在使用两页, index.html.erb 和 show.html.erb 。在索引页面中,我想显示列表和显示页面,我想仅显示一个学生的信息。我是Ruby在Rails上的新手,但我想变得更好。感谢您的所有回复。
index.html.erb
<h1> Welcome </h1>
<%= link_to "Display Table", students_show_path %>
<%= link_to "Form", students_new_path %>
<ol> Students
<% @student.each do |s| %>
<!--<li><%= link_to s.FirstName, students_show_path(@student.students_id), method: :post %> </li> -->
<li><%= link_to s.FirstName, :action => "show", :id => Student.id %> </li>
<% end %>
</ol>
这是我的show.html.erb
表的页面
<% @student.each do |s| %>
<tr>
<td> <%= s.FirstName %> </td>
<td> <%= s.LastName %> </td>
<td> <%= s.NickName %> </td>
<td> <%= s.EmailAddress %> </td>
<td> <%= s.Birthday %> </td>
<td> <%= s.MedicalNotes %> </td>
<td> <%= s.Grade %> </td>
<td> <%= s.School %> </td>
<td> <%= s.Gender %> </td>
</tr>
这是我的Routes.rb
Rails.application.routes.draw do
root 'students#index'
get 'students/index'
get 'students/show'
get 'students/new'
get 'students/update'
get 'students/create'
get 'students/edit'
get 'students/destroy'
get '/signup', to: 'students#new'
post '/signup', to: 'students#create'
post '/index', to: 'students#index'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
resources :students
# generates:
# get "/students" -- index on your controller
# get "/students/:id" -- show on your controller
# get "/students/new" -- new method on your controller
# post "/students" -- create on your controller
# get "/students/:id/edit" -- edit method on your controller
# put "/students/:id" -- update on your controller
# patch "/students/:id" -- update on your controller
# delete "/students/:id" -- destroy on your controller
end
这是我的susidess_controller
class StudentsController < ApplicationController
def index
@student = Student.all
end
def show
id = params[:id]
@student = Student.where("Student id = ?" , "#{id}")
end
def new
@student = Student.new
end
def update
end
def create
@student = Student.new(student_params)
if @student.save
redirect_to students_show_path
else
render 'new'
end
end
def edit
end
def destroy
end
private
def student_params
params.permit(:FirstName, :LastName, :NickName, :EmailAddress, :Birthday, :MedicalNotes, :Grade, :School, :Gender)
end
end
for index.html.erb文件,尝试将link_to link_to helpers更新为:
<%= link_to s, s.FirstName %>
如果使用具有显示方法的链接帮助者,您不需要通过完整的路由 ID,Rails将为您自动链接。
删除所有get 'students/...
路由,只需离开resources: :students
即可。您在此行上方指定的路线是多余的。
您的show
方法在控制器中也可以稍微清理:
def show
@student = Student.find(params[:id])
end
最后,我相信您的create
方法,您可以仅使用资源重定向:
def create
@student = Student.new(student_params)
if @student.save
redirect_to @student
else
render 'new'
end
第一件事:
命名属性,方法和变量的Ruby方法是使用Snake_case。例如,s.FirstName
应为s.first_name
。在Ruby中,如果名称像FirstName
一样大写,则实际上是一个常数。这种样式称为骆驼,这是在Ruby中命名类的常规方式,例如StudentsController
。
routes.rb
:
resources :students
您可以通过在命令行上运行rake routes
或在浏览器中访问http://localhost:3000/rails/info/routes
来查看所有这些路由。您可以在文档中了解有关路由的更多信息:http://guides.rubyonrails.org/Routing.html#inspecting-and-and-testing-routes
然后,您可以使用Rails link_to
辅助方法:
<%= link_to s.first_name, s %>
和Rails将为您找出对象的id
。或者如果您想更加明确:
<%= link_to s.first_name, student_path(s.id) %>
以及您想要的StudentsController
的show
操作:
def show
@student = Student.find(params[:id])
end
这将根据:id
参数在数据库中查找学生记录的url for Student Show页面
我注意到有关您的代码的两件事
1(
get 'students/show'
要能够检索用户,您需要一个用户ID,一个唯一的标识符。因此,您的表演路线应包含一个ID。铁轨方式是这样的
get 'students/:id'
我只是在这里访问,因为如果您在查询字符串中使用参数('students/show?id=something'
(
无论如何,您正在定义不同行中的每条路线。事实证明,您只需线
就可以定义所有这些resources :students
2(
在您的节目动作中,您只需要一个用户。而且您有一个ID,这是唯一的,因此您可以使用它直接检索您的用户
def show
@student = Student.find(params[:id])
end
您使用的是where
,这是为了检索与您的病情相匹配的所有用户(也许您想检索每个名称为" John"的用户(。因此,事实证明,您的@user
不包含一个用户,而是您的用户处于关系中。那是因为where
。