无论如何我可以修改默认“show”的行为吗?
目前用户点击主网站上的按钮
<%= link_to "ADD TO CART", product, {:class => "btn btn-primary", :target => '_blank', :method => "get"} %>
用户将自动重定向到包含相应信息的页面。
现在我正在尝试创建一个稍微不同的页面(移动设备友好),并且我创建了一个mobile_show页面,如果我直接访问它,它就能正常工作。
我的问题是我应该如何修改link_to,使其指向/mobile/products/id
而不是当前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
在routes.rb
中 match '/mobile' => 'products#mobile'
match '/cashback' => 'products#cashback'
match '/mobile/products/:id' => 'products#mobile_show'
p / s:我对一般的rails和web开发非常陌生
答案 0 :(得分: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
并在此处理移动请求。
答案 1 :(得分:0)
您实际上应该专门为移动设备创建命名空间或控制器,这样它就不会破坏REST 例如
应用程序/控制器/移动/ 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"} %>