我想将一个名为index
的资源路由添加到Rails 4应用程序,但生成的路由不符合预期。但是,如果我使用其他名称(例如show_index
),它们就是。为了演示,我将从一个没有路由的vanilla Rails应用程序开始:
$ rake routes
You don't have any routes defined!
我将以下内容添加到config/routes.rb
:
resources :items
生成以下资源丰富的Rails路由:
Prefix Verb URI Pattern Controller#Action
items GET /items(.:format) items#index
POST /items(.:format) items#create
new_item GET /items/new(.:format) items#new
edit_item GET /items/:id/edit(.:format) items#edit
item GET /items/:id(.:format) items#show
PATCH /items/:id(.:format) items#update
PUT /items/:id(.:format) items#update
DELETE /items/:id(.:format) items#destroy
如果参数哈希包含show
,则应用程序具有index
操作,可以呈现所谓的{with: 'index'}
(此索引是特定于应用程序的事情,而不是项目的集合或类似的东西。)
我添加了一个自定义index
路由,以使用附加参数调用show
操作:
resources :items do
get 'index' => 'items#show', with: 'index'
end
这会产生一条新路线,但它有item_id
而不是预期的id
(与上面列表中的edit_item
相比):
item_index GET /items/:item_id/index(.:format) items#show {:with=>"index"}
:id
Routing documentation获取on: :member
的方法是使用get 'index' => 'items#show', with: 'index', on: :member
,因此路线需要
item
但这不会产生预期的结果。它会添加预期路线但会从默认show
操作中窃取index_item
方法前缀,而不是使用自己的edit_item
(再次与上面列表中的item GET /items/:id/index(.:format) items#show {:with=>"index"}
GET /items/:id(.:format) items#show
进行比较) :
index
但是,如果我使用show_index
之外的其他内容,例如get 'show_index' => 'items#show', with: 'index', on: :member
,那么它会按预期工作:
show_index_item GET /items/:id/show_index(.:format) items#show {:with=>"index"}
产生
index
因此,在调用路径resources
时,行为会有所不同。我希望这是因为隐含的index
路由使用该名称,尽管我认为它们不会以冲突的方式使用它。在我看来,我应该能够添加一条新的index_item
路线,该路线将成为edit_item
(类似于现有的item_index
,与现有的index
相反)。
我知道我可以通过使用不同的名称来解决这个问题。但show_index
读取的内容优于index
。
所以我的问题是是否可以指定:id
关键的package com.example.android.buttons;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class Main2Activity extends AppCompatActivity {
private static Button button_sbm1 , button_sbm2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
button_sbm1 = (Button) findViewById(R.id.button2);
button_sbm2 = (Button) findViewById(R.id.button3);
button_sbm1.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intentMainActivity = new Intent(Main2Activity.this, MainActivity.class);
startActivity(intentMainActivity);
}
});
button_sbm2.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intentMain3Activity = new Intent(Main2Activity.this, Main3Activity.class);
startActivity(intentMain3Activity);
}
}
);
}
资源路径?
`
答案 0 :(得分:1)
要设置特定网址使用as
关键字,请尝试以下操作:
get 'index' => 'items#show', with: 'index', on: :member, as: 'item_index'
或其中一个当然是你的愿望。