Rails 4 : Table 布尔列更新始终使用 "link_to " 和特定值 "TRUE"
Rails 4 : Table Boolean Column Update Using "link_to "with a specific value "TRUE" always
在我的客户控制器中,更新方法代码如下所示:
def update
@customer= Customer.find(params[:id])
if @customer.update_attributes(customer_params)
redirect_to customers_path
else
render 'edit'
end
end
在我看来,在客户索引页面中,我计划添加一个 "link_to" link,如果单击它,则该特定客户字段 "doc_delete" 应该更新为值 "TRUE".
<td><%= link_to "[Update", *************what is here ?******** method: :put %></td>
您需要一个表格来为您做这件事
<% unless customer.doc_delete? %>
<%= form_for customer do |f| %>
<%= f.hidden_field_tag :doc_delete, true %>
<%= f.submit %>
<% end %>
<% end %>
在哪里插入这个表格?
好吧,如果您使用以下方式呈现您的客户:
<%=render @costumers %>
然后您将在 /customers/_customer.html.erb
中添加表格
如果您手动循环:
<% @customers.each do |customer| %>
<%=customer.full_name %>
## Here you can add the form
<% end %>
你可以通过button_to
传递隐藏参数:
<%= button_to "Update", user, method: :put, params: { doc_delete: true } %>
这将创建一个 micro-form,就像 Marwen
提到的那样。虽然效率很低,但这将是向您的 update
操作发送数据的最佳方式。
--
另一种更有效的方法是定义自定义 route/action:
#config/routes.rb
resources :customers do
patch :doc_delete, on: :member #-> url.com/users/:id/doc_delete
end
#app/controllers/customers_controller.rb
class CustomersController < ApplicationController
def doc_delete
@customer = Customer.find params[:id]
redirect_to customers_path if @customer.update doc_delete: true
end
end
#app/views/customers/index.html.erb
<% @customers.each do |customer| %>
<%= link_to "Update", customer_doc_delete_path(customer) %>
<% end %>
另一种方式,你可以使用Ajax.
#app/views/customers/index.html.erb
<% @customers.each do |customer| %>
<% if !customer.doc_delete == true %>
<%= link_to "Update", customer_doc_delete_path(customer), remote: true %>
<% else %>
<%= Updated %>
<% end %>
<% end %>
#config/routes.rb
resources :customers do
patch :doc_delete, on: :member #-> url.com/customers/:id/doc_delete
end
#app/controllers/customers_controller.rb
class CustomersController < ApplicationController
def doc_delete
@customer = Customer.find params[:id]
if @customer.update doc_delete: true
respond_to do | format |
format.js {render :nothing => true}
end
end
end
end
在我的index.html
<td>
<%= hidden_field_tag 'delete_present', :value => "present" %>
<%=link_to "[update]", customer_path(customer, :doc_delete => true), :method => :put, :confirm => "Are you sure?" %>
</td>
在我的客户控制器中
def update
if params[:doc_delete].present?
@customer= Customer.find(params[:id])
@customer.doc_delete=true
@customer.save
redirect_to customers_path
else
@customer= Customer.find(params[:id])
if @customer.update_attributes(customer_params)
redirect_to customers_path
else
render 'edit'
end
end
end
在我的客户控制器中,更新方法代码如下所示:
def update
@customer= Customer.find(params[:id])
if @customer.update_attributes(customer_params)
redirect_to customers_path
else
render 'edit'
end
end
在我看来,在客户索引页面中,我计划添加一个 "link_to" link,如果单击它,则该特定客户字段 "doc_delete" 应该更新为值 "TRUE".
<td><%= link_to "[Update", *************what is here ?******** method: :put %></td>
您需要一个表格来为您做这件事
<% unless customer.doc_delete? %>
<%= form_for customer do |f| %>
<%= f.hidden_field_tag :doc_delete, true %>
<%= f.submit %>
<% end %>
<% end %>
在哪里插入这个表格?
好吧,如果您使用以下方式呈现您的客户:
<%=render @costumers %>
然后您将在 /customers/_customer.html.erb
如果您手动循环:
<% @customers.each do |customer| %>
<%=customer.full_name %>
## Here you can add the form
<% end %>
你可以通过button_to
传递隐藏参数:
<%= button_to "Update", user, method: :put, params: { doc_delete: true } %>
这将创建一个 micro-form,就像 Marwen
提到的那样。虽然效率很低,但这将是向您的 update
操作发送数据的最佳方式。
--
另一种更有效的方法是定义自定义 route/action:
#config/routes.rb
resources :customers do
patch :doc_delete, on: :member #-> url.com/users/:id/doc_delete
end
#app/controllers/customers_controller.rb
class CustomersController < ApplicationController
def doc_delete
@customer = Customer.find params[:id]
redirect_to customers_path if @customer.update doc_delete: true
end
end
#app/views/customers/index.html.erb
<% @customers.each do |customer| %>
<%= link_to "Update", customer_doc_delete_path(customer) %>
<% end %>
另一种方式,你可以使用Ajax.
#app/views/customers/index.html.erb
<% @customers.each do |customer| %>
<% if !customer.doc_delete == true %>
<%= link_to "Update", customer_doc_delete_path(customer), remote: true %>
<% else %>
<%= Updated %>
<% end %>
<% end %>
#config/routes.rb
resources :customers do
patch :doc_delete, on: :member #-> url.com/customers/:id/doc_delete
end
#app/controllers/customers_controller.rb
class CustomersController < ApplicationController
def doc_delete
@customer = Customer.find params[:id]
if @customer.update doc_delete: true
respond_to do | format |
format.js {render :nothing => true}
end
end
end
end
在我的index.html
<td>
<%= hidden_field_tag 'delete_present', :value => "present" %>
<%=link_to "[update]", customer_path(customer, :doc_delete => true), :method => :put, :confirm => "Are you sure?" %>
</td>
在我的客户控制器中
def update
if params[:doc_delete].present?
@customer= Customer.find(params[:id])
@customer.doc_delete=true
@customer.save
redirect_to customers_path
else
@customer= Customer.find(params[:id])
if @customer.update_attributes(customer_params)
redirect_to customers_path
else
render 'edit'
end
end
end