【发布时间】:2016-05-09 10:42:05
【问题描述】:
这是我的模型代码。
class Subject < ActiveRecord::Base
has_many :pages
validates :name,
:presence => true,
:length => { :maximum => 255 }
scope :visible, lambda { where(:visible => true) }
scope :invisible, lambda { where(:visible => false) }
scope :sorted, lambda { order("subjects.position ASC")}
scope :newest_first, lambda { order("subject.created_at DESC") }
scope :search, lambda { |query|
where(["name LIKE ?", "%#{query}%"])
}
end
我注意到它在说明我的创建操作。所以是这样的:
class SubjectsController < ApplicationController
layout "admin"
def index
@subjects = Subject.sorted
end
def show
@subject = Subject.find(params[:id])
end
def new
@subject = Subject.new({:name => 'Default'})
@subject_count = Subject.count + 1
end
def create
# Instantiate a new object using form parameters
@subject = Subject.new(subject_params)
# Save the object
if @subject.save
# If save succeeds, redirect to the index
flash[:notice] = "The subject was created successfully."
redirect_to(:action => 'index')
else
@subject_count = Subject.count + 1
render(new)
end
end
def edit
@subject = Subject.find(params[:id])
@subject_count = Subject.count
end
def update
# Find an existing object using form parameters
@subject = Subject.find(params[:id])
# Update the object
if @subject.update_attributes(subject_params)
# If save succeeds, redirect to the show
flash[:notice] = "The subject was updated successfully."
redirect_to(:action => 'show', :id => @subject.id)
else
# If update fails, redisplay the form so user can fix problem.
@subject_count = Subject.count
render('edit')
end
end
def delete
@subject = Subject.find(params[:id])
end
def destroy
subject = Subject.find(params[:id]).destroy
flash[:notice] = "The subject '#{subject.name}' was deleted successfully."
redirect_to(:action => 'index')
end
private
def subject_params
# same as using "params[:subject]", except that it:
# -raises an error if :subject is not present
# -allows listed attributes to be mass-assigned
params.require(:subject).permit(:name, :position, :visible)
end
end
如果我取消验证,它可以工作,但是我可以创建没有名称的主题。我注意到如果我添加一个主题,括号“3”中的数字会向上移动。我想知道它是否与选择表单有关。表格如下:
<%= error_messages_for(@subject) %>
<table summary="Subject form fields" class="table table-hover">
<tr>
<th><%= f.label(:name, "Name") %></th>
<td><%= f.text_field(:name) %></td>
</tr>
<tr>
<th><%= f.label(:position) %></th>
<td><%= f.select(:position, 1..@subject_count) %></td>
</tr>
<tr>
<th><%= f.label(:visible) %></th>
<td><%= f.check_box(:visible) %></td>
</tr>
</table>
更新:我正在为每个请求添加索引视图。
<% @page_title = 'Subjects' %>
<div class="subjects show">
<h2>Subjects</h2>
<%= link_to("Add New Subject", {:action => 'new'}, :class => 'action new btn btn-default') %>
<table class="listing table table-hover" summary="Subject list">
<tr class="header">
<th>Position</th>
<th>Subject</th>
<th>Visible</th>
<th>Pages</th>
<th>Actions</th>
</tr>
<% @subjects.each do |subject| %>
<tr>
<td><%= subject.position %></td>
<td><%= subject.name %></td>
<td class="center"><%= subject.visible ? 'Yes' : 'No' %></td>
<td class="center"><%= subject.pages.size %></td>
<td class="actions">
<%= link_to("Show", {:action => 'show', :id => subject.id}, :class => 'action show') %>
<%= link_to("Edit", {:action => 'edit', :id => subject.id}, :class => 'action edit') %>
<%= link_to("Delete", {:action => 'delete', :id => subject.id}, :class => 'action delete') %>
</td>
</tr>
<% end %>
</table>
</div>
【问题讨论】:
-
这里到底发生了什么“如果我添加一个主题,括号'3'中的数字会向上移动。”
-
您可能想在此处检查
select助手的语法:guides.rubyonrails.org/… -
@PudparK 我的错,
count是 ActiveRecord 的内置方法 :) -
@PudparK 你能添加控制台日志吗?看起来错误是由于这种方法apidock.com/rails/v4.2.1/ActionView/PartialRenderer/…
-
阿比奈是对的。
render :new或render 'new'
标签: ruby-on-rails validation model-view-controller model controller