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 %>
驗證現在可以使用,但它將參數作爲'Parameters:{「utf8」=>「✓」,「a這樣我就不能再使用'params [:hashtag]了''''''''''''''''' '所以功能不起作用。 – thebusiness11
只需使用params [:hashtag] [:hashtag] – thebusiness11
如果您使用'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