新手问题 报错了说:wrong number of arguments (1 for 2) ,找了好久没搞定,求大神指点迷津,谢谢

cly · 2016年02月01日 · 最后由 cly 回复于 2016年02月24日 · 13043 次阅读

wrong number of arguments (1 for 2) ,找了好久没搞定,求大神指点迷津,谢谢

报错指向:if @feedback.update(:optype=> Feedback::OPTYPE[:complain])

class FeedbacksController < ApplicationController

  before_action :feedback_permission, only:[ :complain, :update, :show, :edit, ]

  def index
    @optype = params[:optype]
    @state = params[:state]
    cond_arr = []
    cond_arr << [:optype,@optype] if @optype.present?
    cond_arr << [:state,@state] if @state.present?
    hash = Hash[*cond_arr.flatten]
    if hash.blank?
      @feedbacks =  Feedback.recent.where(:optype=>[2,3]).page params[:page]
    else
      @feedbacks =  @current_user.feedbacks.recent.where(hash).page params[:page]
    end

  end



  def new
      @feedback = Feedback.new
  end

  def create
    @feedback = Feedback.new(feedback_params)
    respond_to do |format|  
      if @feedback.save
          format.html { redirect_to feedbacks_url, notice: '创建成功' }
        format.json { render :show, status: :created, location: @feedback }
      else
        format.html { render :new }
        format.json { render json: @feedback.errors, status: :unprocessable_entity }
      end
    end
  end



  def edit
  end  

  def update
    @feedback.optype = params[:optype]
    if
      @feedback.optype == 1

      @feedback_ids = params[:feedback]
    end  



    respond_to do |format|
       if feedback.update(feedback_params)

        format.html { redirect_to feedbacks_url, notice: '更新成功.' }
        format.json { render :show, status: :ok, location: @feedback }

       end
    end
  end

  def show
  end 


  def complain
    if @feedback.update(:optype=> Feedback::OPTYPE[:complain])
      redirect_to items_url, notice: '发布成功.'  
    end
  end

  # def destroy
    #   @feedback.destroy
    #   respond_to do |format|
    #       format.html{redirect_to admin_feedbacks_url, notice:"删除成功"}
    #       format.json{render :no_content}
    #   end
  # end

  private
  # def set_feedback
  #   @feedback = Feedback.find(params[:id])
  # end
  def feedback_permission
    @feedback = Feedback.where(:id => params[:id])
  end  
  def feedback_params
      params.require(:feedback).permit(:user_id, :item_id, :state, :optype, :classify, :desc, :phone, :item_name, :fd_name)

  end


end

猜你是需要 @feedback.update_attributes

你的 rails 版本是多少

发现你的问题了,你的 def feedback_permission 里面,@feedback是 where 的结果,是一个 relation,relation 的 update 方法需要 2 个参数,不是直接传 hash

ActiveRecord::Relation#update != ActiveRecord#update

def feedback_permission
  @feedback = Feedback.find(params[:id])
end

@rei 是的,我是想从一张表里 find 出投诉和维权,然后 update 那块不知道怎么写。在做一个投诉和维权,功能有我的投诉和我收到的投诉,我的维权和我收到的维权,他们的字段一样,然后我把它们放一张表里了。请问有类似的代码吗?刚学 ruby,想参考一下,谢谢。

#3 楼 @zj0713001 想了好久还是不知道怎么样写 update,可以指点下吗?谢谢

按照四楼的写法,不该 update 应该就可以了。

#8 楼 @cly 改成

def feedback_permission
  @feedback = Feedback.find(params[:id])
end
cly 关闭了讨论。 06月25日 13:28
需要 登录 后方可回复, 如果你还没有账号请 注册新账号