使用admindashboard rails中的link_to更新产品属性

时间:2018-01-13 16:30:49

标签: ruby-on-rails controller routes attributes link-to

我是Ror的新人...... 我想使用简单的link_to直接从我的管理信息中心更新产品属性(:从False => True激活)。 当用户在我的应用程序中添加新产品时,我(管理员)检查产品是否尊重条件,然后从admindashboard发布它。 这是我的代码:

页/ admindashboard.html.erb

Articles on waiting list: <strong><%= @notactives.count %></strong>
<% @notactives.each do |product| %>
<ul>
<li><strong><%= link_to product.name, product_path(product) %> <%= product.user.pseudo %></strong> (<%= product.updated_at.strftime("%d/%m/%Y") %>)
<% if product.active? %>
<p>publié</p>
<% elsif product.status? %>
<p>sold</p>
<% else %>
<span class="label label-success"> <%= link_to "publish the article", publish_product_path %></span>
<% end %>
</li>
</ul>
<% end %>

页面控制器:

  def publish_product
    @product = Product.find(params[:id])
    if @product.update(product_params)
      @product.active = true
      @product.save
    redirect_to :admindashboard
      end
  end

  private

  def product_params
    params.require(:product).permit(:name, :description, :brand, :category, :color, :size, :state, :price, :address, :status, :active)
  end

的routes.rb

patch '/publish_product' =>'pages#publish_product'

提前求助

1 个答案:

答案 0 :(得分:1)

您可以设置路线接受来自参数的ID:

patch '/publish_product/:id' =>'pages#publish_product'

然后在link_to中使用该路径加上id:

<% @notactives.each do |product| %>
  ...
  <%= link_to 'publish the article', publish_product_path(product.id) %> 
<% end %>

在控制器中你可以翻转&#34;基于当前值的属性,如:

def publish_product
  @product = Product.find(params[:id])
  @product.active = !@product.active
  redirect_to :admindashboard if @product.save
end