我的代码有问题,我无法弄清楚它是什么。已经有一天我试图通过谷歌搜索和搜索Stack Overflow来解决这个问题。
错误:
Processing ClassTimingsController#show (for 127.0.0.1 at 2014-02-05 15:27:19) [POST]
Parameters: {"authenticity_token"=>"sRTUkx7slXEX+kmzNl4GbYSIFSyf1WGSP5fRB5+rPzY=",
"batch_id"=>"13", "_"=>"", "action"=>"show", "controller"=>"class_timings"}
[FedenaRescue] AR-Record_Not_Found Couldn't find Planner without an ID
ActiveRecord::RecordNotFound (Couldn't find Planner without an ID):
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1567:in `
find_from_ids'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:616:in `find'
app/controllers/class_timings_controller.rb:103:in `show'
我想show
中的“class_timings_controller.rb”存在一些问题。
def show
@planner = nil
if params[:planner_id] == ''
@class_timings = ClassTiming.find(:all, :conditions=>["planner_id is null and is_deleted = false"])
else
@class_timings = ClassTiming.active_for_planner(params[:planner_id])
@planner = Planner.find params[:planner_id] unless params[:id] == ''
end
respond_to do |format|
format.js { render :action => 'show' }
end
end
我的错误是什么?
以下是MVC的代码。
class ClassTiming < ActiveRecord::Base
belongs_to :batch
belongs_to :planner
validates_presence_of :subject_title
validates_uniqueness_of :subject_title, :scope => [:planner_id , :batch_id, :is_deleted]
named_scope :for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i, :is_deleted=>false, :checklist => false} } }
named_scope :default, :conditions => { :batch_id => nil, :checklist => false, :is_deleted=>false }
named_scope :active_for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i, :is_deleted=>false} } }
named_scope :active, :conditions => { :batch_id => nil, :is_deleted=>false }
named_scope :for_planner, lambda { |p| { :conditons => { :planner_id => p.to_i, :is_deleted=>false, :checklist => false} } }
named_scope :default, :conditions => { :planner_id => nil, :checklist => false, :is_deleted=>false }
named_scope :active_for_planner, lambda { |p| { :conditions => { :planner_id => p.to_i, :is_deleted=>false} } }
named_scope :active, :conditions => { :planner_id => nil, :is_deleted=>false }
end
索引
<div id="content-header">
<%= image_tag("/images/show_timetable.png") %>
<h1><%= t('teaching_schedule') %></h1>
<h3><%= t('create_new_teaching_schedule') %></h3>
<div id="app-back-button">
<%= link_to_function image_tag("/images/buttons/back.png", :border => 0), "history.back()" %>
</div>
</div>
<div id="page-yield">
<div id="flash_box"></div>
<% unless flash[:notice].nil? %>
<p class="flash-msg"> <%= flash[:notice] %> </p>
<% end %>
<div class="label-field-pair">
<label ><%= t('select_a_batch') %>:</label>
<div class="text-input-bg">
<%= select :batch, :id,
@batches.map {|b| [b.full_name, b.id] },
{:prompt => "#{t('common')}"},
{:onchange => "#{remote_function(
:url => { :action => 'show' },
:with => "'batch_id='+value",
:before => "Element.show('loader')",
:success => "Element.hide('loader')"
)}"} %>
<label ><%= t('select_a_module') %>:</label>
<div class="text-input-bg">
<%= select :planner, :id,
@planners.map {|p| [p.name, p.id] },
{:prompt => "#{t('common')}"},
{:onchange => "#{remote_function(
:url => { :action => 'show' },
:with => "'planner_id='+value",
:before => "Element.show('loader')",
:success => "Element.hide('loader')"
)}"} %>
<%= image_tag("loader.gif", :align => "absmiddle", :border => 0, :id => "loader", :style =>"display: none;" ) %>
</div></div></div>
<div id="class-timings-list"><%= render :partial => "show_batch_timing" %></div>
<div id="modal-box" style="display:none;"></div>
<div class="extender"></div>
</div>
<div class="linker">
<%= link_to_remote "#{t('add')}", :url => { :action => 'new', :id => @planner , :id => @batch} %>
</div>
<% unless @class_timings.empty? %>
<table id="class-timings-list" width="100%">
<tr class="tr-head">
<td><%= t('subject_title') %></td>
<td><%= t('page_no') %></td>
<td><%= t('duration') %></td>
<td><%= t('checklist') %></td>
<td><%= t('tutor_name') %></td>
<td><%= t('operations') %></td>
</tr>
<% @class_timings.each do |class_timing| %>
<tr id="class-timing-<%= class_timing.id %>" class="tr-<%= cycle('odd','even') %>">
<td class="col-2"><%= class_timing.subject_title %></td>
<td class="col-5" style="text-align:right"><%= class_timing.page_no %></td>
<td class="col-5" style="text-align:right"><%= class_timing.duration %></td>
<td class="col-5" style="text-align:center"><%= check_box_tag(nil, class_timing.checklist, class_timing.checklist, :disabled => true) %></td>
<td class="col-3"><%= class_timing.tutor_name %></td>
<td class="col-3"><small><%= link_to_remote("#{t('edit_text')}",
:url => edit_class_timing_path(class_timing), :method => 'get' ) %> |
<% @tt = PeriodEntry.find_all_by_id(class_timing_id ) %>
<!-- <% @tt = PeriodEntry.find_all_by_class_timing_id(class_timing.id ) %> -->
<% if @tt.empty? %>
<%= link_to_remote("#{t('delete_text')}",
:url => class_timing_path(class_timing),
:method => 'delete',
:confirm => "#{t('confirm_msg')}",
:update => "class-timing-#{class_timing.id}") %>
<% else %>
<s><%= t('delete_text') %></s>
<% end %></small></td>
</tr>
<% end %>
</table>
<% else %>
<h4><%= t('set_in_common') %></h4>
<% end %>
<label class="head_label"><%= t('create_new_teaching_schedule_for') %> <br>
<span>
<% if @planner.nil? and @batch.nil? %>
<%= t('common') %>
<% else %>
<%= @planner.name and @batch.full_name %>
<% end %>
</span></label>
<div id="ajax-create">
<% form_remote_for :class_timing,
:url => { :action => 'create'} do |f| %>
<% planner_id = (@planner.nil? ? nil : @planner.id) %>
<% batch_id = (@batch.nil? ? nil : @batch.id) %>
<%= f.hidden_field :planner_id, :value => planner_id %>
<%= f.hidden_field :batch_id, :value => batch_id %>
<div id="form-errors"></div>
<div class="label-field-pair">
<label for="name"><%= t('subject_title') %></label>
<div class="input-field"><%= f.text_field :subject_title %></div>
</div>
<div class="label-field-pair">
<label for="name"><%= t('page_no') %></label>
<div class="input-field"><%= f.text_field :page_no %></div>
</div>
<div class="label-field-pair">
<label for="name"><%= t('duration') %></label>
<div class="input-field"><%= f.text_field :duration %></div>
</div>
<div class="label-field-pair">
<label for="name"><%= t('Completed') %></label>
<div><%= f.check_box :checklist, :checked => false %></div>
</div>
<div class="label-field-pair">
<label for="name"><%= t('tutor_name') %></label>
<div class="input-field"><%= f.text_field :tutor_name %></div>
</div>
<br>
<br>
<br>
<%= f.submit "? #{t('save')}", :class => 'submit-button' %>
<% end %>
</div>
<label class="head_label"><%= t('edit_teaching_schedule_for') %> <br>
<span>
<% if @planner.nil? and @batch.nil? %>
<%= t('common') %>
<% else %>
<%= @planner.name and @batch.name %>
<% end %>
</span></label>
<div id="ajax-edit">
<% form_remote_for @class_timing do |f| %>
<div id="form-errors"></div>
<div class="label-field-pair">
<label for="name"><%= t('subject_title') %></label>
<div class="text-input-bg"><%= f.text_field :subject_title %></div>
</div>
<div class="label-field-pair">
<label for="name"><%= t('page_no') %></label>
<div class="text-input-bg"><%= f.text_field :page_no %></div>
</div>
<div class="label-field-pair">
<label for="name"><%= t('duration') %></label>
<div class="text-input-bg"><%= f.text_field :duration %></div>
</div>
<div class="label-field-pair">
<% if @class_timing.checklist %>
<label for="name"><%= t('Completed') %></label>
<div><%= f.check_box :checklist, :checked => true %></div>
<% else %>
<label for="name"><%= t('Completed') %></label>
<div><%= f.check_box :checklist, :checked => false %></div>
<% end %>
</div>
<div class="label-field-pair">
<label for="name"><%= t('tutor_name') %></label>
<div class="input-field"><%= f.text_field :tutor_name %></div>
</div>
<br>
<br>
<br>
<%= submit_tag "? #{t('save')}", :class => 'submit-button' %>
<% end %>
</div>
class ClassTimingsController < ApplicationController
before_filter :login_required
filter_access_to :all
def index
@batches = Batch.active
@planners = Planner.active
@class_timings = ClassTiming.find(:all,:conditions => { :planner_id => nil, :batch_id => nil, :is_deleted=>false})
end
def new
@class_timing = ClassTiming.new
@batch = Batch.find params[:id] if request.xhr? and params[:id]
@planner = Planner.find params[:id] if request.xhr? and params[:id]
respond_to do |format|
format.js { render :action => 'new' }
end
end
def create
@class_timing = ClassTiming.new(params[:class_timing])
@planner = @class_timing.planner
@batch = @class_timing.batch
respond_to do |format|
if @class_timing.save
@class_timing.planner.nil? and @class_timing.batch.nil? ?
@class_timings = ClassTiming.find(:all,:conditions => { :planner_id => nil,:batch_id => nil,:is_deleted=>false}) :
@class_timings = ClassTiming.for_batch(@class_timing.batch_id)
@class_timings = ClassTiming.for_planner(@class_timing.planner_id)
# flash[:notice] = 'Teaching schedule was successfully created.'
format.html { redirect_to class_timing_url(@class_timing) }
format.js { render :action => 'create' }
else
@error = true
format.html { render :action => "new" }
format.js { render :action => 'create' }
end
end
end
def edit
@class_timing = ClassTiming.find(params[:id])
respond_to do |format|
format.html { }
format.js { render :action => 'edit' }
end
end
def update
@class_timing = ClassTiming.find params[:id]
respond_to do |format|
if @class_timing.update_attributes(params[:class_timing])
@class_timing.planner.nil? and @class_timing.batch.nil? ?
@class_timings = ClassTiming.find(:all,:conditions => { :planner_id => nil, :batch_id => nil}) :
@class_timings = ClassTiming.for_batch(@class_timing.batch_id)
@class_timings = ClassTiming.for_planner(@class_timing.planner_id)
# flash[:notice] = 'Teaching schedule updated successfully.'
format.html { redirect_to class_timing_url(@class_timing) }
format.js { render :action => 'update' }
else
@error = true
format.html { render :action => "new" }
format.js { render :action => 'create' }
end
end
end
def show
@batch = nil
if params[:batch_id] == ''
@class_timings = ClassTiming.find(:all, :conditions=>["batch_id is null and is_deleted = false"])
else
@class_timings = ClassTiming.active_for_batch(params[:batch_id])
@batch = Batch.find_by_id params[:batch_id] unless params[:batch_id] == ''
end
@planner = nil
if params[:planner_id] == ''
@class_timings = ClassTiming.find(:all, :conditions=>["planner_id is null and is_deleted = false"])
else
@class_timings = ClassTiming.active_for_planner(params[:planner_id])
@planner = Planner.find_by_id params[:planner_id] unless params[:planner_id] == ''
end
respond_to do |format|
format.js { render :action => 'show' }
end
end
def destroy
@class_timing = ClassTiming.find params[:id]
@class_timing.update_attribute(:is_deleted,true)
end
end
我提供了所有代码来帮助你弄清楚,虽然我知道一些代码与show无关。
答案 0 :(得分:0)
params[:planner_id] or params[:id]
未正确通过我猜..
使用Planner.find_by_id params[:planner_id]
答案 1 :(得分:0)
试试这个:
@planner = Planner.find params[:planner_id] if params[:id].present?
present?
将处理零,空白等
答案 2 :(得分:0)
你没有将params[:planner_id]
传递给你的控制器,因此它是零,而不是''。
因此,您正在调用条件else
,并且您正在调用Planner.find nil
。
通过调用if params[:planner_id].present?
来改变这种情况。