当我转到此链接 - localhost:3000 / serial-name 时,它会返回 -
SerialsController中的NoMethodError#show
未定义的方法`season'为nil:NilClass
我的代码
serial.rb
validates :name, presence: true, uniqueness: true
def to_param
name.parameterize
end
has_many :seasons
season.rb
validates :season_number, presence: true, uniqueness: true,
:numericality => { greater_than_or_equal_to: 1 }
belongs_to :serial
serials_controller.rb
def index
@serials = Serial.all
end
def show
@serial = Serial.find_by_name(params[:id])
@seasons = @serial.seasons
end
serials_controller.rb
get '/:name', to: 'serials#show', as: :serial
root 'serials#index'
答案 0 :(得分:1)
def show
@serial = Serial.find_by!(name: params[:id])
@seasons = @serial.seasons
end
如果无法找到记录, find_by!
将引发ActiveRecord::RecordNotFound
异常。这将显示404错误页面。
但是在定义虚荣网址时,最好同时使用"漂亮的" param和id。
class Serial
def self.find(id)
where(id: id).or.where(name: id).first!
end
end
def show
@serial = Serial.find(id)
@seasons = @serial.seasons
end
答案 1 :(得分:0)
问题在于:
@serial = Serial.find_by_name(params[:id])
您正在寻找params[:id]
中的名称,但id
不在params
哈希中,因为您在路线中将其定义为name
:
get '/:name', to: 'serials#show', as: :serial
所以请改用params[:name]
:
@serial = Serial.find_by_name(params[:name])