没有响应我的链接的操作

irl*_*irl 1 ruby routes ruby-on-rails

我有一个简单的网络应用程序与用户和帖子.我有一个索引控制器和视图,显示数据库中的帖子列表.使用该列表,它显示链接到特定帖子的"显示"链接.

我试图为用户复制它,但出了点问题.我有一个索引视图,显示数据库中的所有用户,我有一个"配置文件"链接,应链接到特定用户.(显示操作已用于用户自己的帐户)请参阅下面的代码,用户配置文件操作与Post Show操作相同但不起作用.

# users_controller.rb

  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @users }
    end
  end

  def profile
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @user }
    end
  end

# posts_controller.rb

  def index
    @posts = Post.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
    end
  end

  def show
    @post = Post.find(params[:id])
    @user = User.find_by_id(@post.user_id)

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @post }
    end
  end

# users/index.html.erb

<h1>Listing All Users</h1>

<table>
  <tr>
    <th>Name</th>
    <th>Email</th>
  </tr>

<% @users.each do |user| %>
  <tr>
    <td><%= link_to user.login, user %></td>
    <td><%=h user.email %></td>
  </tr>
<% end %>
</table>

<br />
Run Code Online (Sandbox Code Playgroud)

我想我的路线可能有问题.但我看不到任何东西.

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
  map.root :controller => "Home"
  map.resource :account, :controller => "users"
  map.resources :password_resets
  map.resources :users
  map.resource :user_session
  map.root :controller => "user_sessions", :action => "new"
  map.resources :users, :has_many => :posts
Run Code Online (Sandbox Code Playgroud)

当我尝试转到用户/ 1时,我得到"没有操作响应1.操作:创建,编辑,索引,新建,配置文件,显示和更新"

Jon*_*ian 5

路线从上到下进行评估.users/1被你抓住了:controller/:action/:id,而不是map.resources :users你想要的.将这两个"默认路由"移动到文件的底部.

map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
Run Code Online (Sandbox Code Playgroud)

  • 是的.您需要在路径中添加特殊的`profile`动作:`map.resources:users,:member => {:profile =>:get}`.然后`<%= link_to user.login,user_profile(user)%>` (2认同)