0

我正在尝试使帖子和评论系统正常工作,但是我希望每个帖子只发表一条评论。仅当我试图创建一个系统时,将在其中显示内容,然后在一篇文章中评论 7 次...示例...

程序模型1 正文内容1

评论model1

程序模型 1 正文内容 2

评论model2

程序模型 1 正文内容 3

评论model3

等等等等

对我来说,这是通过创建 7 个不同的评论模型来做到这一点的最简单方法,我知道可能有一种更简单的方法,但由于我是新手,这似乎是最简单的。但是,我正在努力让一个评论模型只允许发表一条评论。

在这个应用程序中,教练是用户。

以下是涉及的文件,对于模型,程序是基本的帖子模型,评论是评论。

程序/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

在此先感谢您的帮助,非常感谢!

4

1 回答 1

0

将您的程序注释关系更改为 has_one.(has_one :comment in your 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
于 2013-06-27T13:53:41.703 回答