Rails 3.1.3: почему этот вложенный ресурс link_to удаляет моего пользователя, а не мой пост? - PullRequest
0 голосов
/ 01 февраля 2012

Новичок в рельсах и создание простого блога в рельсах 3.1.3, где у пользователя есть сообщения, а сообщение принадлежит пользователю. Всякий раз, когда я пытаюсь удалить конкретное сообщение в блоге для определенного пользователя, я в конечном итоге уничтожаю пользователя, но не сообщение ...

1) что я делаю не так? 2) Для более опытных программистов, как вы узнали, какие «объектные» аргументы нужно передавать и использовать синтаксис пути (например, edit_user_post_path (@ user, post)) при изучении маршрутизации Rails? Был ли это вопрос проб и ошибок и чтения API? (что я сейчас и делаю).

Фрагмент кода из представления index.html.erb, где я пытаюсь уничтожить сообщение определенного пользователя

#Navigate to http://localhost:3000/users/7/posts which brings up index.html.erb view:
<% @posts.each do |post| %>
 <tr>
   <td><%= post.content %></td>
   <td><%= post.title %></td>
   <td><%= link_to 'Show', ([@user, post] ) %></td>
   <td><%= link_to 'Edit', edit_user_post_path(@user,post) %></td>
   <td><%= link_to 'Destroy', [@user, post], confirm: 'Are you sure?', method: :delete %></td>
  </tr>

Настройка вложенных ресурсов выглядит следующим образом:

Маршруты от маршрутов. Rb

Simpleblog::Application.routes.draw do
  resources :users do
    resources :posts
  end

  resources :posts
:

Модель

class Post < ActiveRecord::Base
  belongs_to :user, :dependent=>:destroy
end

class User < ActiveRecord::Base
  has_many :posts
end

Фрагмент кода Post Controller

class PostsController < ApplicationController
   before_filter :get_user
 :
 def index
    @posts = @user.posts
 :
 def show
     @post = @user.posts.find(params[:id])
  :
 def destroy
   @post = @user.posts.find(params[:id])
    @post.destroy

   respond_to do |format|
     format.html { redirect_to user_posts_url }
     format.json { head :ok }
   end
 end

 private
 def get_user
    @user = User.find(params[:user_id]) 
 end

1 Ответ

1 голос
/ 01 февраля 2012

одна проблема в том, что у вас есть belongs_to :user, :dependent=>:destroy в вашем сообщении, которое удалит пользователя при удалении сообщения. так что я думаю, что это должно перейти на сторону пользователя, поэтому, когда вы удаляете пользователя, вы также удаляете сообщения.

изучение маршрутов не из легких, но вы к этому привыкаете. хороший момент для начала - написать тесты для них. таким образом вы получите лучшее понимание того, как и где размещать объекты / идентификаторы / параметры. в конце концов, это то же самое, что и в ваших маршрутах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...