【问题标题】:No action responding to my link没有响应我的链接的操作
【发布时间】:2010-02-25 18:37:24
【问题描述】:

我有一个包含用户和帖子的简单网络应用。我有一个显示数据库中帖子列表的索引控制器和视图。通过列表,它会显示一个“显示”链接,该链接链接到特定的帖子。

我正在尝试为用户复制它,但出了点问题。我有一个显示数据库中所有用户的索引视图,并且我有一个应该链接到特定用户的“个人资料”链接。 (显示操作已用于用户自己的帐户)请参见下面的代码,用户配置文件操作与发布显示操作相同,但不起作用。

# 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 />

我认为这可能是我的路线中的问题。但我什么都看不到。

  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

当我尝试转到 users/1 时,我收到“没有响应 1 的操作。操作:创建、编辑、索引、新建、配置文件、显示和更新”

【问题讨论】:

    标签: ruby-on-rails ruby routes


    【解决方案1】:

    从上到下评估路线。 users/1:controller/:action/:id 抓住,而不是像你想要的那样被 map.resources :users 抓住。将这两条“默认路由”移至文件底部。

    map.connect ':controller/:action/:id'
    map.connect ':controller/:action/:id.:format'
    

    【讨论】:

    • 谢谢。这消除了错误。现在“”正在链接到 show 操作。我希望它链接到配置文件操作。这是路由问题吗?
    • 是的。您需要将特殊的 profile 操作添加到您的路线:map.resources :users, :member =&gt; {:profile =&gt; :get}。然后&lt;%= link_to user.login, user_profile(user) %&gt;
    • 感谢您的回答,但不幸的是 user_profile(user) 给出了错误。虽然链接 /3/profile/ 有效。是时候查找我认为的路线了!
    • 我用“map.profile 'profile/:id', :controller => 'users', :action => 'profile'”解决了这个问题
    • 糟糕,应该是user_profile_path(user)。使用 rake routes 查看所有基于 routes.rb 的命名路由。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2017-03-16
    • 2018-07-08
    • 2019-08-28
    • 2022-11-21
    • 2015-10-20
    相关资源
    最近更新 更多