0

无论如何我可以修改默认“show”的行为吗?

当前,当用户单击主站点的按钮时

<%= link_to "ADD TO CART", product, {:class => "btn btn-primary", :target => '_blank', :method => "get"} %>

用户将被自动重定向到包含适当信息的页面。

现在我正在尝试创建一个稍微不同的页面(移动友好),并且我创建了一个 mobile_show 页面,如果我直接访问它就可以工作。

我的问题是我应该如何修改 link_to 以使其指向/mobile/products/id而不是 current products/id

更新(额外信息):

在 products_controller.rb`

  # GET /mobile
  # GET /mobile.json
  def mobile
    @products = Product.current

    respond_to do |format|
      format.html # mobile.html.erb
      #format.json { render json: @products }
    end
  end`

  # GET /mobile/products/1
  # GET /mobile/products/1.json
  def mobile_show
    @product = Product.find(params[:id])
    @product.update_attribute(:is_active, false)

    respond_to do |format|
      format.html # mobile_show.html.erb
      #format.json { render json: @product }
    end
  end

在路线.rb

  match '/mobile' => 'products#mobile'
  match '/cashback' => 'products#cashback'
  match '/mobile/products/:id' => 'products#mobile_show'

p/s:总的来说,我对 Rails 和 Web 开发很陌生

4

2 回答 2

0

根据您现有的路线,您可以将路线更改为

match '/mobile/products/:id' => 'products#mobile_show', as: :mobile_product

那么在你看来

<%= link_to "ADD TO CART", mobile_product_path(product), {:class => "btn btn-primary", :target => '_blank', :method => "get"} %>

更新:这是一个好习惯吗?

这实际上取决于您想要实现的目标。如果您想为您的应用程序创建移动版本,我建议您查看响应式 ui。如果这是不可能的,处理这个问题的正确方法是创建一组不同的控制器来处理移动请求。这些控制器应放置在不同的命名空间下。

namespace :mobile do
  resources :products
end

这将期望您在app/controllers/mobile/products_controller.rb这里有一个并处理移动请求。

于 2013-03-05T06:57:28.610 回答
0

您实际上应该为移动设备创建一个命名空间或控制器,这样它就不会破坏 REST,例如

app/controllers/mobile/products_controller.rb

或者

应用程序/控制器/mobile_products_controller.rb

但是要使用您的方法,您可能需要为您的路线添加一个名称,以便您可以使用它

match '/mobile' => 'products#mobile', :as => "mobile"

然后改变你的

<%= link_to "ADD TO CART", mobile_path, {:class => "btn btn-primary", :target => '_blank', :method => "get"} %>
于 2013-03-05T07:00:56.857 回答