2016-09-16 45 views
0

我想根據Hartl的教程實現用戶審閱。如何創建用於審閱用戶的表單

我沒有問題在Rails的控制檯中進行,但我遇到了表單的麻煩。

形式是能夠保存,但不保存內容:

INSERT INTO "reviews" ("reviewer_id", "reviewee_id", "created_at","updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["reviewer_id", 1], ["reviewee_id", 15], ["created_at", 2016-09-16 09:52:49 UTC], ["updated_at", 2016-09-16 09:52:49 UTC]] 

這是用戶模式:

has_many :active_reviews, class_name: "Review", 
          foreign_key:"reviewer_id", 
          dependent: :destroy 
has_many :passive_reviews, class_name: "Review", 
          foreign_key:"reviewee_id", 
          dependent: :destroy 
has_many :reviewing, through: :active_reviews, source: :reviewee 
has_many :reviewers, through: :passive_reviews, source: :reviewer 

def review(other_user, great) 
    active_reviews.create!(reviewee_id: other_user.id, content: great) 
end 

以及審查模式:

belongs_to :reviewer, class_name: "User" 
belongs_to :reviewee, class_name: "User" 
validates :reviewer_id, presence: true 
validates :reviewee_id, presence: true 

和Review控制器:

class ReviewsController < ApplicationController 
    before_action :logged_in_user, only: [:create, :destroy] 


    def create 
    @review = current_user.active_reviews.build 
    @user = User.find(params[:reviewee_id]) 
    current_user.review(@user, :content) 
    redirect_to reviews_user_path(@user) 
    flash[:success] = "User reviewed" 
    end 

    def destroy 
    end 

end 

意見(共享/ _review_form.html.erb):

<%= form_for(@review) do |f| %> 
     <%= render 'shared/error_messages', object: f.object %> 
     <div><%= hidden_field_tag :reviewee_id, @user.id %></div> 
     <%= f.text_area :content, placeholder: "Leave a review..." %> 
        <%= f.submit "Submit", class: "btn btn-primary" %> 
<% end %> 

視圖(用戶/ user_reviews.html.erb):

<% provide(:title, @title) %> 
<div class="row"> 
    <aside class="col-md-4"> 
    <section class="user_info"> 
     <%= gravatar_for @user %> 
     <h1><%= @user.name %></h1> 
     <span><%= link_to "view my profile", @user %></span> 
     <span><b>Microposts:</b> <%= @user.microposts.count %></span> 
    </section> 
    <section class="user_info"> 
     <%= render 'shared/review_form' %> 
    </section> 
    <% @reviews.each do |r| %> 
    <ol class="users follow"> 
     <li><%= r.reviewer.name %>: <%= r.content %></li> 
    </ol> 
    <% end %> 
</aside> 
</div> 
+0

我建議你閱讀[如何提問的智能方式](http://catb.org/esr/faqs/smart-questions.html)。它會幫助你理解如何處理堆棧溢出等網站。我們不關心您的專業知識或經驗,我們希望看到經過深思熟慮的問題,並得到很好的解答。 –

回答

1

我認爲你已經不叫 '保存'方法在你創建功能

如:

def create 

    #---your code---- 

    @reviews= Review.new(review_params) 

    if @review.save 
     redirect_to :action => 'list' 
    else  
     render :action => 'new' 
    end 

end 
0

個謝謝,我已經想通了

我的內容尚未插入,因爲它是內部審覈的哈希

"review"=>{"content"=>"fsdfsdfsdf"} 

溶液

def create 
    @user = User.find(params[:reviewee_id]) 
    @review = Review.create!(reviewer_id: current_user.id, reviewee_id:@user.id, content: params[:review][:content]) 
if @review.save 
    redirect_to reviews_user_path(@user) 
    flash[:success] = "User reviewed" 
end 
end 

def destroy 
end 
+1

請不要爲你的問題添加答案,除非你打算選擇這個作爲官方答案。相反,感謝幫助你最多的回答者,通過提出答案和/或選擇提供解決方案的答案。添加你的最終代碼並沒有達到這個目標,實際上並不鼓勵。 –

+0

謝謝,我會記下來。 – Holmes

相關問題