私はjquery-tokeninputを使用していますが、それぞれUser
に新しいカスタムトークン(Tag
)を追加できるようにするフォークですResource
。
ここでの例(タグボックスまで下にスクロールして、いくつかの文字を入力します。存在しない文字を入力できます): http: //www.tomsguide.fr/solutions/nouveau_sujet.htm
私が使用しているフォークからの現在の戻り値は次のとおりです(引用符で囲まれた新しい値):
16,42,'Subway',37,'McDonald\'s',734
Railsでこれを処理しようとすると非常に困難です。これはそれを完全に要約します。
これは私がこれまでに持っていたものであり、おそらく私が見ていない多くの理由で機能していませんが、主な理由は、新しいタグインスタンスを作成する必要があるが、それらを保存しない必要があることです。そうすれば、どういうわけかそれらを渡すことができますトークン入力に戻り、フォームを送信するときに新しいタグを新しいリソースと一緒に保存します。ただし、Tag.newを使用すると、IDは作成されません。
resource.rb
attr_accessor :tokens_list
# CUSTOM TOKENS
def tag_tokens=(tokens)
self.tokens_list = tokens.split(",")
if new_custom_tokens?
self.tokens_list.each do |token|
tokens_list << token if token.include? "'"
end
end
self.tag_ids = self.tokens_list
end
def new_custom_tokens?
self.tokens_list.each do |token|
return true if token.include? "'"
end
false
end
resources_controller.rb
def create
@title = "Submit Resource"
@resource = Resource.new(params[:resource])
assign_to_global_user?
# CUSTOM TOKENS
if @resource.new_custom_tokens?
custom_token_time_restriction
# Create Tag.new
end
if @resource.valid?
@resource.save
flash[:notice] = "Your link has been successfully submitted."
redirect_to root_url
else
render :action => :new
end
end
def assign_to_global_user?
if user_signed_in?
@resource.user_id = current_user.id
else
@resource.user_id = User.find_by_username("Global_User").id
end
end
private
# CUSTOM TOKENS
def custom_token_time_restriction
limit = 7 # days
if (@resource.user_id != User.global_user_id) and (Time.now - limit.days > User.find(@resource.user_id).created_at)
# TODO: Check if they are anonymous or their account is newer than 7 days
else
flash[:notice] = "You be Logged in to add new tags, and your account must be older than #{limit} days."
render :action => :new
end
end
new.html.erb(resource#newの場合)
<div class="field">
<%= f.label :tags %>
<%= f.text_field :tag_tokens, "data-pre" => @resource.tags.to_json(:only => [:id, :name]), :class => :tagbox %>
</div>