【问题标题】:Create a post as a user and assign it to a group以用户身份创建帖子并将其分配给组
【发布时间】:2014-12-23 12:08:57
【问题描述】:

在我的 Rails 应用程序中,我创建了三个模型,用户、组和帖子。 我正在努力使@post.group 等于@group.id 帖子从 group#show 控制器内部的渲染发布,然后将自身重定向到 post#create 控制器。如何将@post.group 设置为@group.id?

组控制器

class GroupsController < ApplicationController
  before_action :set_group, only: [:show, :edit, :update, :destroy]

  respond_to :html

  def index
    @groups = Group.all
    respond_with(@groups)
  end

  def show
    @group_id = @group.id
    respond_with(@group)
  end

  def new
    @group = Group.new
    respond_with(@group)
  end

  def edit
  end

  def create
    @group = Group.new(group_params)
    @group.save
    respond_with(@group)
  end

  def update
    @group.update(group_params)
    respond_with(@group)
  end

  def destroy
    @group.destroy
    respond_with(@group)
  end

  private
    def set_group
      @group = Group.find(params[:id])
    end

    def group_params
      params.require(:group).permit(:name, :description, :motto, :usercount, :group, :id, :groupid)
    end
end

PostsController

class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  respond_to :html

  def index
    @posts = Post.all
    respond_with(@posts)
  end

  def show
    respond_with(@post)
  end

  def new
    @post = Post.new
    respond_with(@post)
  end

  def edit
  end

  def create
    @post.group = @group_id
    @post = Post.new(post_params)
    @post.save
    respond_with(@post)
  end

  def update
    @post.update(post_params)
    respond_with(@post)
  end

  def destroy
    @post.destroy
    respond_with(@post)
  end

  private
    def set_post
      @post = Post.find(params[:id])
    end

    def set_group
      @group = Group.find(params[:id])
    end

    def post_params
      params.require(:post).permit(:body, :group, :id)
    end

    def group_params
      params.require(:group).permit(:id, :groupid, :group)
    end
end

后模型

class Post < ActiveRecord::Base
  belongs_to :group
end

组模型

class Group < ActiveRecord::Base
  has_many :posts
end

我当前的代码返回错误undefined methodgroup=' for nil:NilClass` 任何帮助表示赞赏!

【问题讨论】:

  • @post.group = @group_id @group_idnil,因为你没有设置它

标签: ruby-on-rails post ruby-on-rails-4 relationship


【解决方案1】:

您应该从创建Post 实例开始,因为您不这样做。我会这样做:

def create
  @post = @group.posts.build(post_params)
  if @post.save
    # handle success
  else
    # handle error
  end
end

此外,您应该在您的PostsController 中设置before_action :set_group

【讨论】:

  • 应该在哪个控制器中?
  • 顺便说一句,我在 post 控制器中对其进行了测试,它说 nil:NilClass 的未定义方法 `posts'
  • @coreypizzle 它应该在PostsController。之所以这样说是因为您的PostsController 中应该有before_action :set_group
  • 这吐出了错误Couldn't find Group without an ID
  • 然后使用嵌套资源。并学习任何基本的 Rails 教程。
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多