2011-09-29 28 views
0

当我点击一个链接来呈现布局作为我实现jQuery UI选项卡的一部分时,我得到ActionController::RoutingError in Profiles#show。这里是我的link_to使用jQuery UI选项卡和AJAX时的RoutingError

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

我ProfilesController:

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 

我希望发生的是:当你在profile_messages.html.erb节目点击创建的链接被我link_to,布局和在特定的布局加载的消息。这里发生了什么?

UPDATE:添加在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 

回答

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。确保你先列出你的路线!

+0

是吧'资源:messages'或'资源:messages'?我尝试了两种方法,仍然在配置文件中显示RoutingError - ''没有路由匹配{:action =>“profile_messages”,:controller =>“profiles”,:remote => true}'。去localhost3000/messages/profile给MessagesController#显示''RecordNotFound'''找不到ID = profile'的消息 – tvalent2

+0

我已经添加了一个更新,以了解现在发生了什么。 – tvalent2

+0

因此,只要它给你'找不到ID = profile'的消息,这意味着你没有达到正确的路线。也许如果你在资源块之前移动了'get'。记住,如果你阅读'rake routes',它看到的东西的顺序就是它所经历的。第一场比赛,它完成了。稍微更新了我的答案。希望这会让你更接近。 – Travis

1
resource :messages do 
    collection do 
    get :profile_messages 
    end 
end 

在你看来

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

我想我看到了问题。当我使用它并运行它时,什么也没有显示。我在firebug中遇到一个错误:'无法加载资源:服务器响应状态为404(未找到) - profile_messages' – tvalent2