Я бил головой о клавиатуру примерно на один день над этим. Я немного нуб, но я провел некоторое исследование и, похоже, не нашел решения для этого.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
Я полностью в тупике. Любая помощь очень ценится.
Я на Rails 4 поэтому я добавил это в мой контроллер, где они реализованы в виде сильных параметров. –
@ScottS. - Было предложено использовать 'attr_accessor', а не' attr_accessible'. Сильных параметров недостаточно, если у вас нет столбца поддержки с этими именами параметров (например, 'crop_x'). Дайте этому предложению попытку и отправьте ответ. – PinnyM
Doh! спасибо PinnyM за то, что он указал на разницу между ними. Теперь я получаю другую ошибку «AbstractController :: DoubleRenderError в PeopleController # update. Render и/или перенаправление вызывались несколько раз в этом действии ...», который я начну исследовать. –