控制器中的动作不接受算术运算符

时间:2014-06-02 22:13:20

标签: ruby-on-rails

我有一个带有表格的视图,每行我都有一个按钮,允许您将所述行向上移动一个档位。我在我的控制器中创建了一个名为 order_up 的动作来执行这样的方法。

# steps_controller.rb
def order_up
  @users = User.all
  @project = Project.find(3)
  @soriginalorder = :order
  @scounter = 0

  @project.steps.each do |step|
    @scounter = @scounter + 1
    if @scounter == @soriginalorder-1
      step.order = @scounter + 1
    end

    if @scounter == @soriginalorder
      step.order = @scounter-1
    end
  end
end

以下是我观点的相关部分:

<% @step_list_order = 0 %>

<% @project.steps.each do |step| %>
    <li class="list-group-item">
        <% @step_list_order = @step_list_order + 1 %>
        <% step.order = @step_list_order %>
        <%= step.order %>
        <span class="label label-warning"><%= "Step" %></span>
        <%= link_to step.description, edit_step_path(step) %>
        <%= link_to raw("<i class=\"glyphicon glyphicon-arrow-up\"></i> Up"), order_up_step_path(step), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
    </li>
<% end %>

我为不可读的变量名称道歉但是下划线和算术运算符给了我错误。这是我得到的一个“ - ”符号: 未定义的方法` - 'for:order:Symbol 一个不同的SO问题表明事情没有正确定义但是一切似乎都被称为。

我感谢有人可以提供的任何帮助。也很乐意用更多代码或任何说明更新问题。谢谢!

1 个答案:

答案 0 :(得分:3)

您正尝试将整数(数字)添加到符号:order。这不起作用。

你必须改变这一行

@soriginalorder = :order

理解你的逻辑有点难,但你必须将:order改为整数

你可以测试一下

@soriginalorder = 3

这不应该给你同样的错误。

您可以从ancestry gem获得此功能。

您还应该查看此railscast