Новичок в рельсах и создание простого блога в рельсах 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