2013-05-14 2 views
0

Вопрос: Моя цель - отображать проекты под страницей пользователя и отображать окно комментария при каждом проекте, указанном на этой странице пользователя. Но когда я пытаюсь отобразить форму поля комментария, я получаю ошибку маршрутизации. Я знаю, это потому, что он не может вывести идентификатор проекта. Моя догадка связана с контроллером, но не поняла. Кто-нибудь знает, как я могу это решить?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

В вашей ассоциации имеется ошибка. Является 'принадлежит_то: пользователю' и' принадлежит_проекту' в единственном числе. – 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. Поскольку комментарий принадлежит проекту, почему я не могу сделать это redirect_to? – spl

+0

Можете ли вы показать мне код, который вы используете? – cortex

+0

Я редактировал вопрос выше, чтобы показать: "redirect_to projects_user_path (@ project.user)" – spl

Смежные вопросы