2014-02-11 3 views
0

Я бил головой о клавиатуру примерно на один день над этим. Я немного нуб, но я провел некоторое исследование и, похоже, не нашел решения для этого.Rails, Jcrop, Rmagick, Bootstrap - Ошибка метода

Я использую Rails 4.0.2, Ruby 2.0.0p0, Bootstrap 2.3.2, 0.9.12 Jcrop, RMagick 2.13.2

Я пытаюсь реализовать Jcrop в мое приложение и продолжать получать следующее сообщение об ошибке:

NoMethodError in PeopleController#update 
undefined method `crop_x' for #<Person:0x007fc7a531d160> 

Я смотрел на Railscast на реализующего Jcrop и, похоже, у меня есть вещи правильно.

Я также нашел некоторые страницы, такие как this one, которые говорят, что существует проблема с конфликтом между некоторыми CSS в Jcrop и Bootstrap. Я попытался добавить рекомендуемый код и не исправил его. Поэтому я посмотрел файл jquery.Jcrop.css и заметил, что исправление уже включено, поэтому я удалил его из своего файла css.

Это мой фотоUploader.rb, где у меня есть код урожая. Линия я пометил с ** это код выделена ошибкой, когда страница пытается загрузить:

def crop 
**if model.crop_x.present?** 
    resize_to_limit(600, 600) 
    manipulate! do |img| 
    x = model.crop_x.to_i 
    y = model.crop_y.to_i 
    w = model.crop_w.to_i 
    h = model.crop_h.to_i 
    img.crop!(x, y, w, h) 
    end 
end 
end 

Вот мой контроллер для обновления записи:

def update 
respond_to do |format| 
    if @person.update(person_params) 
    if params[:person][:photo].present? 
     render :crop 
    else 
     redirect_to @person, notice: "Successfully created person." 
    end 
    format.html { redirect_to @person, notice: 'Person was successfully updated.' } 
    format.json { head :no_content } 
    else 
    format.html { render action: 'edit' } 
    format.json { render json: @person.errors, status: :unprocessable_entity } 
    end 
end 
end 

Вот мой код контроллера с сильными параметры внедрены:

def person_params 
    params.require(:person).permit(:fname, :mname, :lname, :company, :department, :title, :manager, :direct_report, :ntid, :work_phone, :mobile, :email, :office, :address, :city, :state, :zipcode, :country, :suite, :column, :fax, :assistant, :photo, :crop_x, :crop_y, :crop_w, :crop_h) 
end 

Вот соответствующий код из моей Person модели:

mount_uploader :photo, PhotoUploader 

after_update :crop_photo 

def crop_photo 
    photo.recreate_versions! if crop_x.present? 
end 

Я полностью в тупике. Любая помощь очень ценится.

ответ

3

Вы использовали attr_accessor в вашей модели, как этот

attr_accessor :crop_x, :crop_y, :crop_w, :crop_h 
+0

Я на Rails 4 поэтому я добавил это в мой контроллер, где они реализованы в виде сильных параметров. –

+1

@ScottS. - Было предложено использовать 'attr_accessor', а не' attr_accessible'. Сильных параметров недостаточно, если у вас нет столбца поддержки с этими именами параметров (например, 'crop_x'). Дайте этому предложению попытку и отправьте ответ. – PinnyM

+0

Doh! спасибо PinnyM за то, что он указал на разницу между ними. Теперь я получаю другую ошибку «AbstractController :: DoubleRenderError в PeopleController # update. Render и/или перенаправление вызывались несколько раз в этом действии ...», который я начну исследовать. –

Смежные вопросы