如何将一个布尔切换添加到Rails索引视图?

时间:2013-02-11 09:25:23

标签: ruby-on-rails ruby-on-rails-3.2

在Rails 3.2应用程序中,将表单字段添加到索引视图的最佳方法是什么?

例如,如果我有一个用户列表,并希望为每一行添加一个“已批准”按钮以切换数据库中的布尔字段。

#users/index.html.erb    
<table>
  <tr>
    <th>Name</th>
    <th>Approved</th>
  </tr>
  <%= for user in @users %>
    <tr>
      <td><%= user.name %></td>
      <td><%= CHECKBOX FORM GOES HERE %></td>
    </tr>
  <% end %>
</table>

我不确定如何设置表单标记和/或控制器以确保

a)表格发布到正确的位置和

b)在有意义的用户流程中的某个点发送帖子。

任何人都可以指出我对这种行为的任何好例子,或建议我应该考虑什么。

1 个答案:

答案 0 :(得分:2)

我们这样做的方法是向复选框添加一个观察者,并向更新操作发送请求或仅为此功能添加新操作。添加新动作的优点是它专注于该特定功能,无需额外的检查和操作。

你将改变/添加一些文件,所以它就在这里。希望他们很容易理解。

# view
<td><%= check_box_tag :approved, user.id, user.approved?, class: 'user-approve-cb' %>

# routes
resources :users do
  put :set_approved, on: :member
end

# js asset (using coffee)
$('.user-approve-cb:checkbox').change ->
  $.ajax
    url: '/users/' + @value + '/set_approved'
    type: 'PUT'
    data: { approved: $(this).attr('checked') }
    success: -> alert('User updated')

# controller
def set_approved
  @user = User.find params[:id]
  @user.update_column :approved, params[:approved]

  render nothing: true
end