我正在尝试使用帖子和评论系统,但是我希望每个帖子只能发表一条评论。只有在我尝试创建一个系统时才会显示内容,然后在一个帖子中发表评论7次...示例...
程序模型1正文内容1
Commentmodel1
程序模型1正文内容2
Commentmodel2
程序模型1正文内容3
Commentmodel3
.etc.etc。
对我而言,这是通过创建7种不同的评论模型来实现这一目标的最简单方式,我知道可能有一种更简单的方法,但是作为新的,这似乎是最简单的。然而,我正在努力让一个评论模型只允许一个评论。
在此应用程序中,coach是用户。
以下是涉及的文件,对于模型,程序是基本的Post模型,注释是注释。
程序/ Show.html.erb
<p id="notice"><%= notice %></p>
<p>
<b>Title:</b><br />
<%= @program.title %>
</p>
<p>
<b>Body:</b><br />
<%= @program.cweekcomments %>
</p>
<%= link_to 'Edit', edit_program_path(@program) %> |
<%= link_to 'Back', programs_path %>
<br /><br /><br />
<i>Comments</i>
<% @program.comments.each do |comment| %>
<p>
<b>Comment:</b>
<% if comment %>
<%= comment.body %>
<br />
<%= link_to 'Edit', edit_program_comment_path(@program, comment) %> | <%= link_to 'Destroy', [@program, comment] , method: :delete, data: { confirm: 'Are you sure?' } %>
<% else %>
<%= form_for([@program, @program.comments.build]) do |f| %>
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<% end %>
</p>
<% end %>
Programs_controller.rb
class ProgramsController < ApplicationController
before_filter :authenticate_coach!, :except => [:show]
# GET /programs
# GET /programs.json
def index
@programs = Program.find_all_by_coach_id(current_coach[:id])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @programs }
end
end
# GET /programs/1
# GET /programs/1.json
def show
@program = Program.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @program }
end
end
# GET /programs/new
# GET /programs/new.json
def new
@program = Program.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @program }
end
end
# GET /programs/1/edit
def edit
@program = Program.find(params[:id])
end
# POST /programs
# POST /programs.json
def create
@program = Program.new(params[:program])
respond_to do |format|
if @program.save
format.html { redirect_to @program, notice: 'Program was successfully created.' }
format.json { render json: @program, status: :created, location: @program }
else
format.html { render action: "new" }
format.json { render json: @program.errors, status: :unprocessable_entity }
end
end
end
# PUT /programs/1
# PUT /programs/1.json
def update
@program = Program.find(params[:id])
respond_to do |format|
if @program.update_attributes(params[:program])
format.html { redirect_to @program, notice: 'Program was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @program.errors, status: :unprocessable_entity }
end
end
end
# DELETE /programs/1
# DELETE /programs/1.json
def destroy
@program = Program.find(params[:id])
@program.destroy
respond_to do |format|
format.html { redirect_to programs_url }
format.json { head :no_content }
end
end
end
Comments_controller.rb
class CommentsController < ApplicationController
def new
@comment = @program.comments.build
end
def create
@program = Program.find(params[:program_id])
@comment = @program.comments.create(params[:comment])
redirect_to program_path(@program)
end
def destroy
@program = Program.find(params[:program_id])
@comment = @program.comments.find(params[:id])
@comment.destroy
redirect_to program_path(@program)
end
def edit
@program = Program.find(params[:program_id])
@comment = @program.comments.find(params[:id])
end
def update
@program = Program.find(params[:program_id])
@comment = @program.comments.find(params[:id])
respond_to do |format|
#if @program.comments.update_attributes(params[:comment])
if @comment.update_attributes(params[:comment])
format.html { redirect_to program_path(@program), notice: 'Comment was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
end
提前感谢您的帮助,非常感谢!
答案 0 :(得分:0)
将您的计划评论关系更改为has_one。(has_one:您的program.rb中的评论)
def create
@program = Program.find(params[:program_id])
if @program.comment
flash[:error] = "Cannot comment more than once"
else
@comment = @program.comments.create(params[:comment])
flash[:notice] = "Comment created"
end
redirect_to program_path(@program)
end