2012-12-17 37 views
1

我想在Rails中使用CLient端驗證Gem。我的表單工作發現,直到我的form_for添加`:validate => true。然後我得到一個錯誤告訴我,我寫它的方式是錯誤的我已經嘗試重新格式化它的例子,它只是拋出錯誤rails form_for加載客戶端驗證錯誤

錯誤

Using form_for(:name, @resource) is not supported with ClientSideValidations. Please use form_for(@resource, :as => :name) instead. 

hashtag_controller

def home  
     @leaderboard = Hashtag.leaderboard_history 
     @trends_display = Trend.trends_display 
     @hash_create = "" 
    end 
    def create 
     @hash_create = Hashtag.create_hashtag(params[:hashtag]) 
     Hashlog.create_hashlog(params[:hashtag]) 
     @random_hashtag_pull = Hashtag.random_hashtags_pull 
     @leaderboard = Hashtag.leaderboard_history_current 
     respond_to do |format| 
      format.html { redirect_to root_path } 
      format.js 
     end 
    end 

hashtag.rb

class Hashtag < ActiveRecord::Base 

    attr_accessible :text, :profile_image_url, :from_user, :created_at, :tweet_id, :hashtag, :from_user_name, :view_count, :wins 

    hashtag_regex = /^[A-Za-z\d=#...-]+$/i 

    validates :hashtag, :format => { :with => hashtag_regex }, :length => { :within => 2..20 }      


class << self 

def create_hashtag(hashtag)    #creates new tweetvstweet for inputed hashtag with # for guests 
    dash = "#" 
    @hashtag_scrubbed = [dash, hashtag].join.downcase 
    (User.current_user ? User.current_user.twitter : Twitter).search("%#{@hashtag_scrubbed}", :lang => "en", :count => 100, :result_type => "mixed").results.map do |tweet| 
     unless exists?(tweet_id: tweet.id) 
     create!(
     tweet_id: tweet.id, 
     text: tweet.text, 
     profile_image_url: tweet.user.profile_image_url, 
     from_user: tweet.from_user, 
     from_user_name: tweet.user.name, 
     created_at: tweet.created_at, 
     hashtag: @hashtag_scrubbed, 
     view_count: "0", 
     wins: "0" 
     ) 
     end 
    end 
end 



    def random_hashtags_pull       #pulls 4 random hashtags for a vote first display 
    Hashtag.where{ |hashtag| hashtag.hashtag =~ @hashtag_scrubbed}.order{"RANDOM()"}.limit(4).each(&:update_view_count) 
    end 

    def cast_vote_hashtag(hashtag)     #pulls 4 random hashtags for a vote continued votes 
    Hashtag.where{ |hashtag| hashtag.hashtag =~ @hashtag_scrubbed}.order{"RANDOM()"}.limit(4).each(&:update_view_count) 
    end 

    def leaderboard_history_current     #displaying 5 highscore hashtags on the right 
    Hashtag.where{ |hashtag| hashtag.hashtag =~ @hashtag_scrubbed}.order{"wins DESC"}.limit(5) 
    end 

    def cast_vote(cast_vote)       #counts number of wins 
    Hashtag.increment_counter(:wins, cast_vote) 
    end 

    def leaderboard_history       #right side leaderboard history 
    Hashtag.order('wins DESC').limit(5) 
    end 
end 

    def update_view_count         #updates the number of views 
    Hashtag.increment_counter(:view_count, self.id) 
    self.view_count += 1 
    end 

home.html.erb

<div class="span6 votes-middle"> 
    <%= render 'shared/twitter_search' %> 
    </div> 

**search form** 
<%= form_for(@hash_create, :url => hashtags_path, :validate => true, remote: true) do |f| %> 

       <div class="input-prepend input-append"> 
       <span class="add-on swag">#</span> 
       <%= f.text_field :hashtag,class: "span4 swag_text_field", id:"appendedPrependedInput", :validate => true, data: {autocomplete_source: autocomplete_index_path} %> 

       <%= f.submit "VS!", class: "btn add-on-right swag_button" %> 
       <% end %> 

回答

2

我想你應該爲表單創建新對象

添加@hash_create = HashTag.new在新的行動和改變你的形式因爲

form_for(@hash_create, :url => hashtags_path, :validate => true, remote: true) 
+0

驗證現在可以使用,但它將參數作爲'Parameters:{「utf8」=>「✓」,「a這樣我就不能再使用'params [:hashtag]了''''''''''''''''' '所以功能不起作用。 – thebusiness11

+0

只需使用params [:hashtag] [:hashtag] – thebusiness11

+0

如果您使用'form_for',它應該是必需的模型對象。請參考[this](http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html) 我們只能在form_for中使用模型名稱,然後使用text_field名稱來訪問text_field的值,例如'params [:model_name ] [:FIELD_NAME]'。 我知道你只想用params [:hashtag]訪問文本字段的值嗎? 因爲你可以使用'form_tag'。 client_side_validations也支持簡單的表單,否則你可以將text_field改爲text_field_tag 就像 '<%text_field_tag「hashtag」,params [:hashtag]%>' – nishanthan