如何在没有类别控制器的情况下将类别添加到 rails 中的 post
How to add a category to a post in rails without a category controller
感谢大家的帮助。
我绝对是 rails 的新手,我正在努力学习教程。
任务如下。我有一个 post 模型,它是从只有 content:string 字段的脚手架构建的。
然后是类别模型,而不是脚手架等。想法是类别has_many :posts
和 post belongs_to :类别。类别具有字段名称和描述。
这很好,我明白这一点,我已经将这些添加到模型中。
我也运行迁移
rails generate migration AddCategoryToPost category:references
我现在如何让用户在创建 post.
时添加类别
所以事件的顺序是用户创建一个 post,他们可以在其中添加一个类别,因为 post 已创建。该类别具有用户需要定义的名称和描述。
def new
@post = Post.new
end
def create
@category = Category.new(caregory_params)
@post = Post.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
如何更改 post 控制器的新建、创建和更新方法来实现此目的,以及表单应包含哪些内容才能创建新的 post(和类别)。
非常感谢您在高级方面的帮助,我只是不明白您将如何处理它,因为类别需要是 'object' 并且需要添加到 post对象(需要添加到数据库中)。
您的 PostsController#create
方法现在可能如下所示:
def create
@post = Post.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
和 post_params
类似于:
def post_params
params.require(:post).permit(:title, :body)
end
我还假设您已经定义了 Category
和 Post
之间的关系并相应地迁移了数据库:
class Post < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :posts
end
您需要在 select Post
的创建和更新类别中添加功能。您只需要在两个地方进行更改。
首先是表单 view/posts/_form.html.erb
,您可以在 form_for
块中添加以下代码段:
<div class="field">
<%= f.label :category_id %>
<%= f.collection_select :category_id, Category.all, :id, :name %>
</div>
这将创建一个带有类别列表的 <select>
标签。当 creating/updating 他的博客 post.
时,Blogger 现在可以 select 想要的类别
第二个需要修改的地方是posts_controller
中的post_params
方法:
def post_params
params.require(:post).permit(:title, :body, :category_id)
end
这里你刚刚声明了:category_id
作为一个安全参数。
您现在可以查看了。您的表单现在应该可以正常使用了。
注意 您可能还需要在 post 列表中显示类别 (views/posts/index.html.erb
)。您可以将以下列添加到现有 table:
<td><%= post.category && post.category.name %></td>
感谢大家的帮助。
我绝对是 rails 的新手,我正在努力学习教程。
任务如下。我有一个 post 模型,它是从只有 content:string 字段的脚手架构建的。
然后是类别模型,而不是脚手架等。想法是类别has_many :posts 和 post belongs_to :类别。类别具有字段名称和描述。 这很好,我明白这一点,我已经将这些添加到模型中。
我也运行迁移
rails generate migration AddCategoryToPost category:references
我现在如何让用户在创建 post.
时添加类别所以事件的顺序是用户创建一个 post,他们可以在其中添加一个类别,因为 post 已创建。该类别具有用户需要定义的名称和描述。
def new
@post = Post.new
end
def create
@category = Category.new(caregory_params)
@post = Post.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
如何更改 post 控制器的新建、创建和更新方法来实现此目的,以及表单应包含哪些内容才能创建新的 post(和类别)。
非常感谢您在高级方面的帮助,我只是不明白您将如何处理它,因为类别需要是 'object' 并且需要添加到 post对象(需要添加到数据库中)。
您的 PostsController#create
方法现在可能如下所示:
def create
@post = Post.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
和 post_params
类似于:
def post_params
params.require(:post).permit(:title, :body)
end
我还假设您已经定义了 Category
和 Post
之间的关系并相应地迁移了数据库:
class Post < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :posts
end
您需要在 select Post
的创建和更新类别中添加功能。您只需要在两个地方进行更改。
首先是表单 view/posts/_form.html.erb
,您可以在 form_for
块中添加以下代码段:
<div class="field">
<%= f.label :category_id %>
<%= f.collection_select :category_id, Category.all, :id, :name %>
</div>
这将创建一个带有类别列表的 <select>
标签。当 creating/updating 他的博客 post.
第二个需要修改的地方是posts_controller
中的post_params
方法:
def post_params
params.require(:post).permit(:title, :body, :category_id)
end
这里你刚刚声明了:category_id
作为一个安全参数。
您现在可以查看了。您的表单现在应该可以正常使用了。
注意 您可能还需要在 post 列表中显示类别 (views/posts/index.html.erb
)。您可以将以下列添加到现有 table:
<td><%= post.category && post.category.name %></td>