我得到这个错误结束不知道如何解决它。奇怪的是,它以前工作过。我想在我运行注释后,它已被破坏,但不确定。 错误来自confs.controller索引和自己的方法。 它也拒绝这样的事情:conf.machine_brand [0,1] .upcase as NoMethodError [] bla bla 这是我的conf模型:
# == Schema Information
#
# Table name: confs
#
# id :integer not null, primary key
# machine_brand :string(255)
# machine_model :string(255)
# control_unit_brand :string(255)
# control_unit_model :string(255)
# tool_axis_x :decimal(, )
# tool_axis_y :decimal(, )
# tool_axis_z :decimal(, )
# rotary_axis_number :integer
# linear_axis_number :integer
# turning_mode :boolean
# milling_mode :boolean
# description :text
# xml :text
# user_id :integer
# developer_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
class Conf < ActiveRecord::Base
attr_accessible :linear_axis_number, :control_unit_brand, :control_unit_model, :description, :developer_id, :machine_brand, :machine_model, :milling_mode, :rotary_axis_number, :tool_axis_x, :tool_axis_y, :tool_axis_z, :turning_mode, :user_id, :xml
belongs_to :developer, :class_name => 'User', :foreign_key => 'developer_id'
belongs_to :receiver, :class_name => 'User', :foreign_key => 'user_id'
validates :user_id, presence: true
validates :developer_id, presence: true
end
这是confs.controller:
class ConfsController < ApplicationController
before_filter :signed_in_user, only:[:index, :edit, :update, :destroy]
before_filter :developer_user, only: :destroy
def new
@conf = Conf.new
end
def index
@grouped = {}
Conf.all.each do |conf|
letter = conf.machine_brand.slice(0,1).upcase
@grouped[letter] ||= []
@grouped[letter] << conf
end
end
def show
@conf = Conf.find(params[:id])
respond_to do |format|
format.html #index.html.erb
format.json { render json: @conf }
format.xml { render xml: @conf }
end
end
def own
@grouped = {}
Conf.where(:developer_id => current_user.id).each do |conf|
letter = conf.machine_brand.slice(0,1).upcase
@grouped[letter] ||= []
@grouped[letter] << conf
end
end
def create
@conf = Conf.new(conf_params)
if @conf.save
flash[:success] = "New Configuration uploaded!"
redirect_to conf_show_path
else
flash[:error] = "There is a problem!"
render 'new'
end
end
def destroy
@conf = Conf.find(params[:id]).destroy
redirect_to conf_show_own_path
end
def update
@conf.update_attributes(params[:conf])
end
private
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in"
end
end
def admin_user
redirect_to(root_path) unless current_user.admin?
end
def developer_user
redirect_to(root_path) unless current_user.developer?
end
def conf_params
params.require(:conf).permit(:xml, :user_id, :developer_id) if params[:conf]
end
end
如果你愿意的话,这就是conf.new:
<% provide(:title, 'New Configuration')%>
<h1> Upload new configuration </h1>
<div class="row">
<div class="span6 offset3">
<%= form_for @conf, :html => {:multipart => true} do |f| %>
<%= f.label :machine_brand %>
<%= f.text_field :machine_brand %>
<%= f.label :machine_model %>
<%= f.text_field :machine_model %>
<%= f.label :control_unit_brand %>
<%= f.text_field :control_unit_brand %>
<%= f.label :control_unit_model %>
<%= f.text_field :control_unit_model %>
<%= f.label :tool_axis_x %>
<%= f.text_field :tool_axis_x %>
<%= f.label :tool_axis_y %>
<%= f.text_field :tool_axis_y %>
<%= f.label :tool_axis_z %>
<%= f.text_field :tool_axis_z %>
<%= f.label :rotary_axis_number %>
<%= f.text_field :rotary_axis_number %>
<%= f.label :linear_axis_number %>
<%= f.text_field :linear_axis_number %>
<%= f.label :turning_mode %>
<%= f.text_field :turning_mode %>
<%= f.label :milling_mode %>
<%= f.text_field :milling_mode %>
<%= f.label :description %>
<%= f.text_field :description %>
<%= f.label :xml %>
<%= f.text_field :xml %>
<%= f.label :client %>
<%= f.collection_select :user_id, User.where(:admin => false, :developer => false), :id, :name, options ={:prompt => "Select a client"}, :class =>"user" %>
<%= f.label :me %>
<%= f.collection_select :developer_id, User.where(:id => current_user.id), :id, :name, options ={:prompt => "Select me"}, :class =>"user" %>
<br />
<%= f.submit "Upload", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
答案 0 :(得分:1)
conf.machine_brand.slice(0,1)
我认为你在这里得到了错误machine_brand
所以只需在你的控制器中做
letter = params[:machine_brand].to_s.slice(0,1).upcase unless params[:machine_brand].blank?
或
letter = params[:conf][:machine_brand].to_s.slice(0,1).upcase unless params[:machine_brand].blank?
答案 1 :(得分:0)
正如@Rajarshi所提到的,错误在以下代码中
conf.machine_brand.slice(0,1).upcase
错误表明你在slice
对象上调用了nil
,这意味着你的一个conf记录中有一个nil machine_brand。我不确定您是如何处理此问题的,但如果您添加需要machine_brand的验证,则此问题将会减少
class Conf < ActiveRecord::Base
...
validates :machine_brand, presence: true
或者您只能获取machine_brand
存在的记录
Conf.where('machine_brand IS NOT NULL').each do |conf|
conf.machine_branch.slice(...)