2016-03-03 52 views
-1

我有嵌套在課程資源評價資源的form_for未提交:
的routes.rb:導軌形式使用使用POST方法

我想表明的形式給予的任何顯示頁面的評論課程。
comments_controller.rb:

class CommentsController < ApplicationController 
    before_action :require_user 
    before_action :set_course, only: [:new] 

    def new 
    @comment = Comment.new 
    end 

    def create 
    @comment = Comment.new(comment_params) 
    @comment.course = Course.find(params[:course_id]) 
    @comment.user = current_user 
    if @comment.save 
     flash[:success] = "Comment Posted" 
     redirect_to course_path(@comment.course) 
    else 
     flash[:error] = "Comment can't posted" 
     redirect_to course_path(@comment.course) 
    end 
    end 

    private 

    def set_course 
     @course = Course.find(params[:course_id]) 
    end 

    def comment_params 
     params.require(:comment).permit(:body ,:rating, :course_id, :user_id) 
    end 

end 

我已經把@comment = Comment.new在我的課程中控制器的表演動作。

我使用在視圖中的形式爲:
<%=的form_for([@當然,@comment],方法: 「後」,:URL => course_comments_path(@course,@comment))做| F | %>

  <div class="rrating" style="width:140px;"> 
      <%= f.radio_button(:rating, 1) %> 
      <%= f.label(:rating_1, "1") %> 
      <%= f.radio_button(:rating, 2) %> 
      <%= f.label(:rating_2, "2") %> 
      <%= f.radio_button(:rating, 3) %> 
      <%= f.label(:rating_3, "3") %> 
      <%= f.radio_button(:rating, 4) %> 
      <%= f.label(:rating_4, "4") %> 
      <%= f.radio_button(:rating, 5) %> 
      <%= f.label(:rating_5, "5") %> 
      </div> 

      <%= f.text_field :body, :class => "form-control", id: "exampleInputEmail1", placeholder: "Add a comment" %> 

        </fieldset> 
     <%= f.submit("Post", class: 'btn btn-success') %> 
     <% end %> 
     </form> 

當我點擊提交,GET請求被髮送到同一頁我在目前(與url中所有PARAMS)。
我試圖把表單放在一個單獨的新頁面的意見,它仍然沒有工作。 我在做什麼錯?

+0

嘗試的form_for這樣,'<(%)=的form_for([@當然,@comment],:URL => course_comments_path(@course,@comment),方法: 「後」)做| F | %>'將Url作爲第二個參數 – Sravan

+0

任何人都有任何解決方案...我仍然無法得到這個工作... –

回答

0

這可能會實現,顯示頁面:

<%= form_for([@course, @course.comments.build] , method: :post) do |f| %> 
      <fieldset class="form-group" style="margin-top:0px; !important"> 

         <div class="rrating" style="width:140px;"> 
         <%= f.radio_button(:rating, 1) %> 
         <%= f.label(:rating_1, "1") %> 
         <%= f.radio_button(:rating, 2) %> 
         <%= f.label(:rating_2, "2") %> 
         <%= f.radio_button(:rating, 3) %> 
         <%= f.label(:rating_3, "3") %> 
         <%= f.radio_button(:rating, 4) %> 
         <%= f.label(:rating_4, "4") %> 
         <%= f.radio_button(:rating, 5) %> 
         <%= f.label(:rating_5, "5") %> 
         </div> 

         <%= f.text_field :body, :class => "form-control", id: "exampleInputEmail1", placeholder: "Add a comment" %> 

           </fieldset> 
        <%= f.submit("Post", class: 'btn btn-success') %> 
    <% end %> 

評論控制器:

def create 
      @course = Course.find(params[:course_id]) 
      @comment = @course.comments.create(comment_params) 
      @comment.user = current_user 

    if @comment.save 
     flash[:success] = "Comment Posted" 
     redirect_to course_path(@comment.course) 
    else 
     flash[:error] = "Comment can't posted" 
     redirect_to course_path(@comment.course) 
    end 
    end 
+0

這個dosen't工作...它仍然給出了一個請求...加上你有一個語法errr,缺少結束的「)」 ...... –

+0

更新了答案,固定語法錯誤和方法:添加後形成 –

+0

它仍然有語法錯誤......仍然這麼想的工作 –

-1

既然你分配一個course在手動create actioncomment,您可以將@comment對象只評論表單,你可以去創建操作。

通過一個隱藏字段從形式發送的course_id創建行動

<%= form_for @comment, url: course_comments_path do |f| %> 
 
    <fieldset class="form-group" style="margin-top:0px; !important"> 
 
    <div class="rrating" style="width:140px;"> 
 
     <%= f.radio_button(:rating, 1) %> 
 
     <%= f.label(:rating_1, "1") %> 
 
     <%= f.radio_button(:rating, 2) %> 
 
     <%= f.label(:rating_2, "2") %> 
 
     <%= f.radio_button(:rating, 3) %> 
 
     <%= f.label(:rating_3, "3") %> 
 
     <%= f.radio_button(:rating, 4) %> 
 
     <%= f.label(:rating_4, "4") %> 
 
     <%= f.radio_button(:rating, 5) %> 
 
     <%= f.label(:rating_5, "5") %> 
 
     <%= f.hidden_field :course_id, value: @course.id % 
 
    </div> 
 
    <%= f.text_field :body, :class => "form-control", id: "exampleInputEmail1", placeholder: "Add a comment" %> 
 
    </fieldset> 
 
    <%= f.submit("Post", class: 'btn btn-success') %> 
 
<% end %>

現在你會得到course_id通過PARAMS和課程分配到評論。

+0

仍然沒有工作... :-( –

+0

對不起,但你在說什麼?這是一個選項散列,順序無關緊要... –

+0

@ 2called-chaos,對不起,但是,因爲我看到網址都在第二個參數中,而且我總是採用相同的方式,所以我讓他試試它是否有效。我改變了我的答案。 – Sravan

0

好吧,我有這個問題,並認爲我應該把它放在其他未來的參考。
問題在於form_for被包含在表單標記中。