У меня есть эта ошибка, когда я пытаюсь создать объект обзора:
ArgumentError in ReviewsController#create
wrong number of arguments (1 for 0)
app/controllers/reviews_controller.rb:17:in `new'
app/controllers/reviews_controller.rb:17:in `create'
Я не понимаю, что я делаю не так? Я могу создавать любые другие объекты, но эти выдают эту ошибку, что бы я ни делал. Я стараюсь не приводить никаких аргументов, но все же считаю, что он есть...
Моя модель Review
:
# -*- encoding : utf-8 -*-
class Review < ActiveRecord::Base
attr_accessible :global_validation_date, :hr_comment, :hr_validate, :hr_validator, :manager_comment, :manager_validate, :manager_validation_date, :manager_validator, :owner_satisfaction, :owner_validate, :owner_validation_date, :send, :user_id
belongs_to :user
has_many :review_projects, dependent: :destroy
end
Мой контроллер ReviewsController
:
# -*- encoding : utf-8 -*-
class ReviewsController < ApplicationController
before_filter :authenticate_user!
before_filter :check_permissions, only: :create
def index
@user = User.find(params[:user_id])
@reviews = @user.reviews
end
def create
@user = User.find(params[:user_id])
@reviews = @user.reviews
if @reviews.empty? || check_last_validate
@review = Review.new # HERE IS MY ERROR
if @review.save
render 'index', notice: "Review successfully created"
else
render 'index', notice: "An error occured on saving, please try again"
end
else
render 'index', alert: "You have to validate previous review before create a new one."
end
redirect_to user_reviews_path
end
private
def check_permissions
render_access_forbidden unless current_user == User.find(params[:user_id])
end
def check_last_validate
if [email protected]?
return (@reviews.last.hr_validate || @reviews.last.manager_validate)
else
return false
end
end
end
Я прочитал все те же вопросы на SO, но ничего не работает. Я осторожен с опечатками, но я не думаю, что сделал ошибку.
Я попробовал три способа создать свой объект Review
:
@review = Review.new
@review.user_id = current_user.id
@review.hr_validator = ((current_user.hr_id.nil?) ? current_user.id : current_user.hr_id )
@review.manager_validator = ((current_user.manager_id.nil?) ? current_user.id : current_user.manager_id )
@review.hr_validate = false
@review.manager_validate = false
@review.owner_validate = false
@review.hr_comment = ""
@review.manager_comment = ""
@review.owner_satisfaction = nil
@review.send = false
@review = Review.new(
user_id: current_user.id,
hr_validator: ((current_user.hr_id.nil?) ? current_user.id : current_user.hr_id ),
manager_validator: ((current_user.manager_id.nil?) ? current_user.id : current_user.manager_id ),
hr_validate: false,
manager_validate: false,
owner_validate: false,
hr_comment: "",
manager_comment: "",
owner_satisfaction: nil,
send: false )
@user.reviews.create!(
user_id: current_user.id,
hr_validator: ((current_user.hr_id.nil?) ? current_user.id : current_user.hr_id ),
manager_validator: ((current_user.manager_id.nil?) ? current_user.id : current_user.manager_id ),
hr_validate: false,
manager_validate: false,
owner_validate: false,
hr_comment: "",
manager_comment: "",
owner_satisfaction: nil,
send: false )
Последний дает мне ту же ошибку, за исключением:
wrong number of arguments (2 for 0)
Моя рубиновая версия — 1.9.3, моя версия рельсов — 3.2.13.
Спасибо.
РЕДАКТИРОВАТЬ :
Когда я пытаюсь использовать в своей консоли rails этот код:
current_user = User.first # as you are inside rails console you wont have current_user available to you
@review = Review.new(user_id: current_user.id,
hr_validator: ((current_user.hr_id.nil?) ? current_user.id : current_user.hr_id ),
manager_validator: ((current_user.manager_id.nil?) ? current_user.id : current_user.manager_id ),
hr_validate: false,
manager_validate: false,
owner_validate: false,
hr_comment: "",
manager_comment: "",
owner_satisfaction: nil,
send: false )
@review.save
Я получаю эту ошибку:
ArgumentError: wrong number of arguments (2 for 0)
from /Users/killian/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/attribute_methods/read.rb:71:in `__temp__'
from /Users/killian/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:85:in `block in assign_attributes'
from /Users/killian/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:78:in `each'
from /Users/killian/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:78:in `assign_attributes'
from /Users/killian/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/base.rb:498:in `initialize'
from (irb):31:in `new'
from (irb):31
from /Users/killian/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
from /Users/killian/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
from /Users/killian/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
def initialize
в своей модели? - person Bart Jedrocha   schedule 25.06.2014initialize
. Я искал везде, если я не переопределял методnew
илиinitialize
, но ничего не нашел. - person Kilian   schedule 25.06.2014return (@reviews.last.hr_validate || @reviews.last.manager_validate)
в своем методе check_last_validate? и вы не инициализируете свой обзор должным образом, у вас нет ничего в параметрах - person Mandeep   schedule 25.06.2014has_many :reviews, order: 'id ASC', dependent: :destroy
в моделиUser
), чтобы проверить, подтвержден ли последний отзыв или нет. Но я уже пытаюсь выйти из всех условий, и это все равно не работает. Даже когда я пытаюсь использовать простую строку вrails console
. - person Kilian   schedule 25.06.2014@review = Review.new
,@review.save
иredirect_to
вdef create
, чтобы изолировать проблему, и это все еще не работает. - person Kilian   schedule 25.06.2014send
, так как это может конфликтовать с механизмом отправки ruby. - person Daiku   schedule 26.06.2014send
в моем файлеstructure.sql
и в файлеattr_accessible
. Я думал, что использовал зарезервированное слово, но, видимо, нет. Я также пытаюсь переименовать модельReview
и та же проблема. Так что это может исходить от одного из его атрибутов. - person Kilian   schedule 26.06.2014