2013-06-27 1 views
0

Я пытаюсь получить сообщение и систему комментариев, работающих, для этого, однако я хочу, чтобы только один комментарий был сделан за сообщение. Только как я пытаюсь создать систему, где содержание будет отображаться с последующим комментарием 7 раз в одном посте ... Пример ...Когда сделан комментарий, больше не может быть создано, только показано

модели Содержание программы 1 корпус 1

Commentmodel1

программы содержание 1 модель тела 2

Commentmodel2

модель программы 1 б Содержание оды 3

Commentmodel3

.etc.etc.

Для меня это самый простой способ сделать это, создав 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 

Заранее, спасибо за вашу помощь, высоко ценится!

+0

Если вы хотите только один комментарий будет добавлен к сообщению, просто сделайте проверку в 'CommentsController # создать '. Если '@ program' уже имеет комментарий, не создавайте новый. – khustochka

+0

Как я могу это сделать? извините новичок в RoR – user2278385

ответ

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 
+0

Спасибо, очень сильно, когда я перехожу к has_one, я получаю сообщение erorr, говорящий о неопределенном методе «каждый» в <% @ program.comment.each do | comment | %> что я должен изменить? – user2278385

+0

@ program.comment не возвращает массив. Вам не нужно проходить через нее. – usha

+0

ok thats cool, поэтому ive теперь изменил <% = комментарий.body%> на <% = @ program.comment.body%>, который теперь не возвращает ошибку, однако как я теперь создаю форму для создания комментария? на данный момент у меня есть <% = form_for ([@ program, @ program.comment.build]) do | f | %> но это dosnt нравится :(! – user2278385