2013-05-14 52 views
0

问题:我的目标是列出用户页面下的项目,并在此用户页面上列出的每个项目下都有评论框呈现。但是,当我尝试呈现评论框表单时,出现路由错误。我知道这是因为它无法取出项目的ID。我的猜测与控制器有关,但尚未弄清楚。有人知道我能如何解决这个问题吗?Rails - 路由错误 - 从另一个模型调用模型

Routing Error 
No route matches {:controller=>"comments", :format=>nil, :project_id=>#<Project id: nil...>} 

对于我的申请,我已经创建模型和控制器的用户,项目和评论。评论属于工程和项目属于用户

user.rb

has_many :projects 

project.rb

has_many :comments 
belongs_to :user 

comment.rb

belongs_to :project 

的routes.rb

resources :users do 
    resources :projects do 
    resources :comments 
    end 
end 

resources :projects do 
    resources :comments 
end 

resources: comments 

视图/用户/ projects.html.erb

<%= render @projects %> 

视图/项目/ _project.html.erb

<%= project.content %> 
<%= render 'comments/form' %> 

检视/评论/ _form.html.erb

<%= form_for([@project, @project.comments.build]) do |f| %> 
    <div class="field"> 
    <%= f.text_area :content, :class => "span12", :rows => "3" %> 
    </div> 

    <%= f.hidden_field :user_id, :value => current_user.id %> 

    <div class="actions"> 
    <%= f.submit "Add Comment", :class => "btn btn-header" %> 
    </div> 
<% end %> 

comments_controller.rb

def create 
    @project = Project.find(params[:project_id]) 
    @comment = @project.comments.create!(params[:comment]) 

    if @comment.save 
    redirect_to projects_user_path(@project.user) 
    end 
end 

从重定向错误上述

NoMethodError in CommentsController#create 
undefined method `user' 
+0

您的关联中存在错误。是'belongs_to:user'和'belongs_to project'单数。 – cortex

+0

谢谢。固定。路由错误仍然存​​在。 – spl

回答

0

尝试这种情况:

视图/项目/ _project.html.erb

<%= project.content %> 
<%= render 'comments/form', project: project %> 

查看/评论/ _form.html.erb

<%= form_for([project, project.comments.build]) do |f| %> 
... 

你要通过这个项目,形成局部的。

希望这会有所帮助!

+0

好吧,现在它发布到我的数据库,但是当我尝试修复评论控制器中的redirect_to到@ comment.project时,我得到一个NoMethodError。由于评论belongs_to项目,为什么我不能使这个redirect_to? – spl

+0

你能告诉我你正在使用的代码吗? – cortex

+0

我编辑了上面的问题以显示:“redirect_to projects_user_path(@project.user)” – spl

相关问题