从控制器中的方法获取数据并在视图中显示它

时间:2013-07-05 05:43:30

标签: ruby-on-rails ruby controller get

我已经编写了一种计算特定部分投票的方法,并将其显示在视图文件中。但是,当我调用此方法时,计数不会增加。我应该在以下方法中进行任何更改

控制器中的voteme方法代码如下:

     def voteme(num)
         @section = Section.find(params[:id])
         @section.vote += num
     end

和视图文件中的代码是

<%= link_to" up",:url => voteme_section_path(1),:html => {:method => :post}%>

也可以有人建议我显示更新计数值的代码。我在剖面模型中有一个投票字段。

3 个答案:

答案 0 :(得分:1)

在您的视图文件中

<%= link_to "up", voteme_section_path(1), :method => :post %>

但我有一个问题,你是在投票反对某个部分。所以你为什么要把1传给它。你应该传递section对象,如果你将它存储在@section变量中。所以你可以更好地修改链接

<%= link_to "up", voteme_section_path(@section), :method => :post %>

在你的路线文件中,我猜你需要做一些像这样的事情

resources :sections do
  member do
    post 'voteme'
  end
end

在控制器部分,'voteme'动作

def voteme
  @section = Section.find_by_id(params[:id])

  unless @section.blank?
    @section.update_column('vote', @section.vote + 1)
  else
    flash[:notice] = 'Sorry something goes wrong'
  end

  redirect_to your-path-that-you want-to-show.
end

答案 1 :(得分:0)

更改值后尝试添加@ section.save。

这个逻辑也应该在模型中,而不是在控制器中。控制器应该只在模型和视图之间来回传递信息。

答案 2 :(得分:0)

def voteme(num)
  @section = Section.find(params[:id])
  @section.update_attribute('vote', @section.vote+1)
end