【发布时间】:2013-12-11 10:07:31
【问题描述】:
我希望在 application>layout 中有类似“link_to kosh,....”的内容,这样一个简单的用户就可以查看只有 kosh 发布的所有帖子。我必须做出哪些改变,这可能吗??
senario:我是一个简单的用户,当我上网时,我看到一个 link_to(按钮)kosh(管理员名称),然后我按下它,我可以看到 kosh 发布的所有帖子。
p.s:kosh 是其中一位管理员,我将有 2-3 个管理员。是 ROR 4
post>控制器
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
before_action :authorize_admin!, except: [:index, :show]
def index
@posts=Post.all
end
def new
@post = Post.new
@post.user_id = session[:user_name]
end
def create
@post = Post.new(post_params)
if @post.save
flash[:notice] = "Post has been created."
redirect_to @post
else
flash[:alert] = "Post has not been created."
render 'new'
end
end
def show
@post = Post.find(params[:id])
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update(post_params)
flash[:notice] = "Post has been updated."
redirect_to @post
else
flash[:alert] = "Post has not been updated."
render "edit"
end
end
def destroy
@post = Post.find(params[:id])
@post.destroy
flash[:notice] = "Post has been destroyed."
redirect_to posts_path
end
private
def post_params
params.require(:post).permit(:title, :description,:prediction,:user_id)
end
def set_post
@post = Post.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:alert] = "The post you were looking" +
" for could not be found."
redirect_to posts_path
end
end
发布>模特
class Post < ActiveRecord::Base
belongs_to :user
validates :title, presence: true
end
用户>模型
class User < ActiveRecord::Base
has_secure_password
has_many :posts
end
发布>数据库
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :title
t.string :description
t.string :user_id
t.timestamps
end
end
end
用户>数据库
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email
t.string :password_digest
t.boolean :admin
t.timestamps
end
end
end
路线
resources :posts
resources :users
编辑代码
我做了一些更改,但仍然无法正常工作。我能够显示每个管理员的链接,但无法仅从该特定管理员那里获取帖子
在路线中
resources :users do
resources :posts
end
在帖子控制器中
def index
@user = User.find(params[:user_id])
@posts = Post.all
end
def create
@user = User.find_by_name(session[:user_name])
@post = Post.new(post_params)
if @post.save
flash[:notice] = "Post has been created."
redirect_to user_post_path(@user,@post)
else
flash[:alert] = "Post has not been created."
render 'new'
end
end
在应用程序中>布局 (这就是我获取链接的方式)
<% User.where(:admin=>true).each do |user| %>
<li> <%= link_to user.name, user_posts_path(user) %> </li>
<% end %>
查看>帖子>索引
<h2>Posts</h2>
<ul>
<% if @posts.present? %>
<% @posts.each do |post| %>
<li><%= link_to post.title %></li>
By: <%= post.user_id%>
<% end %>
</ul>
<%else%>
You don't have any products yet.
<%end%>
<% admins_only do %>
<%= link_to "New Post", new_user_post_path %>
<%end%>
在控制器索引中我尝试放入
@user = User.find(:user_id)
@posts = @user.posts
但是说未定义的帖子。
【问题讨论】:
标签: ruby-on-rails post ruby-on-rails-4 views nested-resources