【问题标题】:Rails, Jcrop, Rmagick, Bootstrap - No Method ErrorRails、Jcrop、Rmagick、Bootstrap - 无方法错误
【发布时间】:2014-02-11 15:46:35
【问题描述】:

为此,我已经用键盘敲打了大约一天。我有点菜鸟,但我做了一些研究,似乎无法找到解决这个问题的方法。

我正在使用 Rails 4.0.2、Ruby 2.0.0p0、Bootstrap 2.3.2、Jcrop 0.9.12、Rmagick 2.13.2

我正在尝试在我的应用中实现 Jcrop 并不断收到以下错误:

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

我查看了有关实施 Jcrop 的 Railscast,看起来我做对了。

我还发现一些像this one 这样的页面说Jcrop 和Bootstrap 中的某些CSS 之间存在冲突问题。我尝试添加推荐的代码,但没有解决它。因此,我查看了 jquery.Jcrop.css 文件并注意到该修复程序已包含在内,因此我将其从我的 css 文件中删除。

这是我的 photoUploader.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

我完全被难住了。非常感谢任何帮助。

【问题讨论】:

    标签: jquery ruby-on-rails twitter-bootstrap rmagick jcrop


    【解决方案1】:

    你的模型中是不是这样使用attr_accessor

    attr_accessor :crop_x, :crop_y, :crop_w, :crop_h 
    

    【讨论】:

    • 我在 Rails 4 上,所以我已将这些添加到我的控制器中,在那里它们被实现为强参数。
    • @ScottS。 - 建议使用attr_accessor,而不是attr_accessible。如果您没有带有这些参数名称的支持列(例如crop_x),那么强大的参数是不够的。试试这个建议并回复。
    • 噢!感谢 PinnyM 指出两者之间的区别。我现在收到一个不同的错误“AbstractController::DoubleRenderError in PeopleController#update。在此操作中多次调用渲染和/或重定向....”我将开始调查。
    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 2018-02-25
    • 2018-07-14
    • 2012-12-07
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    相关资源
    最近更新 更多