使用带有ajax的jQuery UI选项卡时的RoutingError

时间:2011-09-29 01:28:42

标签: ajax ruby-on-rails-3 jquery-ui

当我点击一个链接来渲染布局作为我的jQuery UI标签实现的一部分时,我得到ActionController::RoutingError in Profiles#show。这是我的link_to

<%= link_to "Messages", :controller => 'profiles', :action => 'profile_messages', :remote => true %>

我的个人资料控制器:

def profile_messages
  @messages = User.find(@profile.user_id).messages
  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @messages }
  end
end

我的profile_messages erb布局:

<div id="tabs-2">
<% for message in @user.messages %>
  <div class="message-1">
  </div>
<% end %>
</div><!-- end messages -->

routes.rb中:

resources :messages do
  get "messages/profile" => :profile_messages
  resources :responses
end

我想要发生的是:当您点击我的link_to创建的链接时,profile_messages.html.erb中的布局会显示并加载该特定布局中的消息。这是怎么回事?

更新:Routes.rb中添加新行为我提供了一条新路线:

message_messages_profile GET    /messages/:message_id/messages/profile(.:format)  {:action=>"profile_messages", :controller=>"messages"}

所以我在我的个人资料show.html.erb中试过这个:我把:

<li><%= link_to "Messages", message_messages_profile_path, :remote => true %></li>

这为我提供了RoutingError in Profiles#show - No route matches {:action=>"profile_messages", :controller=>"messages"}。即使我将以下内容添加到MessagesController

def profile_messages
  @message = @user.messages.find(params[:user_id])
  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @messages }
  end
end

3 个答案:

答案 0 :(得分:1)

get "messages/profile" => "messages#profile_messages", :as => profile_messages
resource :messages do
  resource :responses
end

您没有该控制器操作的路由。 Rails默认不再映射“:controller /:action /:id”。您也可以根据需要启用该路线。您可以通过profile_messages_path引用此内容。

我认为'show'实际上是消息的ID。此处列出了资源的默认路由:http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions。确保先列出你的路线!

答案 1 :(得分:1)

resource :messages do
  collection do
    get :profile_messages
  end
end
在您的视图中

<li><%= link_to "Messages", "/messages/profile_messages", :remote => true %></li>

答案 2 :(得分:0)

感谢各位朋友的共同努力,我能够让这一切发挥作用。查看这些问题以获取更多代码:

Exclude application layout in Rails 3 div

Rails 3 jQuery UI Tabs issue loading with Ajax