【问题标题】:controller action contains more than one model method call?控制器动作包含多个模型方法调用?
【发布时间】:2013-08-14 10:45:47
【问题描述】:

我在Rails 4 控制器中有一个简单的update 操作:

#more stuff here
def update
  if @user.update(user_params)
    flash[:notice] = "User #{@user.username} updated"
    redirect_to users_path
  else
    render 'edit'
  end
end
private
def set_user
  @user = User.find(params[:id])
end

但是,RubyMine 警告 @user.update@user.username

如果控制器操作在初始 .find 或 .new 之后包含多个模型方法调用,则此检查会发出警告。建议您在模型类中实现所有业务逻辑,并使用单一方法访问它。

我在这里看不到more than one model method call。有人可以解释发生了什么吗?

编辑 - 我在create 操作中有类似的东西,没有警告,所以我相信与user_params 有一些关系...

def create
  if @user.save
    flash[:notice] = "User #{@user.username} created"
    redirect_to users_path
  else
    render 'new'
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rails-activerecord rubymine


    【解决方案1】:

    假设username 是模型中的一种方法,您可以在其中合并用户first_namelast_name

    我猜@user.update(user_params)@user.username 是你的两个方法调用。一个保存模型,另一个在 flash 通知中设置用户全名。

    这只是来自 ruby​​mine 的警告,它只是建议您采取一些行动,而不是必须遵循它们。

    【讨论】:

    • username 只是User 的一个属性,而我没有收到关于创建操作的相同警告...
    • username 仍然是对模型 User 的方法调用,但不能说明为什么它不会给你同样的创建操作警告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多