今現在、Ruby on Railsの勉強でブログサイトを開発しております。
初心者なのですが、勉強のために少し応用的な「ユーザーと投稿のグループ機能」を実装中です。
そこで、「ユーザーと投稿のグループ機能」について質問なのですが、よろしくお願いいたします。
仕様は以下の通りです。
1.ユーザーは自由に投稿できる(多数の投稿を持つ)
2.投稿はユーザーに属する(1人のユーザーを持つ)
3.投稿は1つのグループに属する(1つのグループを持つ)
4.ユーザーは自由に自分でグループを作成できる(ユーザーは多数のグループを持つ)
5.ユーザーは自由に他のユーザーが作成したグループに参加できる(グループは多数のユーザーを持つ)
6.ユーザーは自分が参加しているグループの中から1つ選んで投稿できる
7.グループを作成したユーザーがそのグループの管理者になる
現在は自分で勉強し、以下の状態までコードを書いています。
しかし、
「4.ユーザーは自由に他のユーザーが作成したグループに参加できる」という部分の「ユーザーをグループに参加させる」という処理と
「5.ユーザーは自分が参加しているグループの中から1つ選んで投稿できる」という部分の「投稿を指定したグループに投稿する」という処理がどういう実装をしたら良いか分かりません。
アドバイスなどして頂けますと幸いです。
よろしくお願いいたします。
コード(コントローラ)
<users_controller.rb>
def index
@users = User.all
end
def show
@user = User.find(params[:id])
@posts = @user.posts.postable_for(current_user)
end
def new
@user = User.new
end
def edit
@user = User.find(params[:id])
end
def create
@user = User.new(user_params)
if @user.save
redirect_to :root, notice: "登録完了"
else
render :new
end
end
def update
if @user.update_attributes(user_params)
redirect_to @user, notice: "会員情報を更新しました。"
else
render :edit
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to :root, notice: "削除しました。"
end
private
def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end
<posts_controller.rb>
def index
@posts = Post.all
end
def show
@post = Post.find(params[:id])
end
def new
@post = Post.new
end
def edit
@post = current_user.posts.find(params[:id])
end
def create
@post = current_user.posts.new(post_params)
if @post.save
redirect_to @post, notice: "投稿しました"
else
render :new
end
end
def update
@post = current_user.posts.find(params[:id])
if @post.update_attributes(post_params)
redirect_to @post, notice: "投稿を編集しました。"
else
render :edit
end
end
def destroy
@post = current_user.posts.find(params[:id])
@post.destroy
redirect_to :root, notice: "投稿を削除しました。"
end
private
def post_params params.require(:post).permit(:title, :content) end
<groups_controller.rb>
def index
@groups = Group.all
end
def show
@group = Group.find(params[:id])
end
def new
@group = Group.new
end
def edit
end
def create
@group = Group.new(group_params)
@group.owner = current_user # グループを作成したユーザーがそのグループの管理者になる
if @group.save
redirect_to @group, notice: "グループを作成しました。"
else
render :new
end
end
def update
@group = Group.find(params[:id])
if @group.update_attributes(group_params)
redirect_to @group, notice: "グループを編集しました。"
else
render :edit
end
end
def destroy
@group = Group.find(params[:id])
@group.destroy
redirect_to :root, notice: "グループを削除しました。"
end
private
def post_params
params.require(:group).permit(:name)
end
コード(モデル)
<User.rb>
id
name
email
has_many :groups, through: :user_grourps
has_many :user_groups
has_many :posts
<Post.rb>
id
user_id
content
group_id
belong_to :user
belong_to :group
<Group.rb>
id
name
owner #グループを作成したユーザー
user_id
has_many :user_groups
has_many :users, through: :user_grourps
has_many :posts
<User_grourp.rb>(UserとGroupの中間テーブル)
user_id
post_id
belong_to :user
belong_to :group
アドバイスなどよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー