Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在令牌输入上使用新令牌确实有困难(来自不同型号)_Ruby On Rails_Ruby_Ruby On Rails 3.1_Jquery Tokeninput - Fatal编程技术网

Ruby on rails 在令牌输入上使用新令牌确实有困难(来自不同型号)

Ruby on rails 在令牌输入上使用新令牌确实有困难(来自不同型号),ruby-on-rails,ruby,ruby-on-rails-3.1,jquery-tokeninput,Ruby On Rails,Ruby,Ruby On Rails 3.1,Jquery Tokeninput,Im使用jquery tokeninput,但它的分支允许用户为每个资源添加新的自定义标记(标记) 此处示例(向下滚动到标记框并键入几个字母。您可以键入不存在的字母): 来自的当前返回值如下(引号中的新值): 我在Rails中处理这个问题时遇到了极大的困难 这就是我到目前为止所做的,它不起作用,可能有很多原因我没有看到,但主要原因是我需要创建新的标记实例,但不保存它们,这样我可以以某种方式将它们传递回令牌输入,并在它们提交表单时将新标记与新资源一起保存。但是,当您使用Tag.new时,它不会创建

Im使用jquery tokeninput,但它的分支允许
用户
为每个
资源
添加新的自定义标记(
标记

此处示例(向下滚动到标记框并键入几个字母。您可以键入不存在的字母):

来自的当前返回值如下(引号中的新值):

我在Rails中处理这个问题时遇到了极大的困难

这就是我到目前为止所做的,它不起作用,可能有很多原因我没有看到,但主要原因是我需要创建新的标记实例,但不保存它们,这样我可以以某种方式将它们传递回令牌输入,并在它们提交表单时将新标记与新资源一起保存。但是,当您使用Tag.new时,它不会创建ID

资源.rb new.html.erb(用于资源#新建)

@resource.tags.to_json(:only=>[:id,:name]),:class=>:tagbox%>

我也有同样的问题。这就是我所做的:

这是以json格式返回搜索标记的函数

tags = TagMaster.where("name LIKE ?", "%#{params[:q]}%").limit(10)
if tags == []
  list << {"id" => "0","name"=>new_tag.rstrip}
else
  tags.each { |tag| list << {"id" => tag.id.to_s, "name" => tag.name }}
end

respond_to do |format|
  format.json { render :json => list.to_json, :layout => false }
end
正如您在这里看到的,我调用add_project_标记,将自定义标记存储到数据库中,并返回插入的标记的id。因此,现在您只需添加id相同的令牌,并删除id为0的令牌

因此,现在将不会有任何具有0的令牌,您可以添加任意数量的新令牌


希望这有帮助。如果还有其他问题,请提问。

这样可以很好地解决,但在下面的场景中可能会出现一些小问题。如果“RubyonRails”作为令牌存储在DB中,现在您希望“rails”作为令牌添加。此解决方案不允许您添加rails。为此,您可以向json添加任何用户类型。为了获得更好的解决方案,您可以检查用户键入的内容是否与类sql查询返回的结果完全相同。
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
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
<div class="field">
  <%= f.label :tags %>
  <%= f.text_field :tag_tokens, "data-pre" => @resource.tags.to_json(:only => [:id, :name]), :class => :tagbox %>
</div>
tags = TagMaster.where("name LIKE ?", "%#{params[:q]}%").limit(10)
if tags == []
  list << {"id" => "0","name"=>new_tag.rstrip}
else
  tags.each { |tag| list << {"id" => tag.id.to_s, "name" => tag.name }}
end

respond_to do |format|
  format.json { render :json => list.to_json, :layout => false }
end
var k = jQuery.noConflict();
k("#project_tags").tokenInput("tag_list", {
  hintText: "Enter Tags for your Project",
  noResultsText: "No Such Tags",
  searchingText: "Looking for your Tags",
  preventDuplicates: true,
  theme: "facebook",
  onAdd: function (item) {
    if (item.id == '0') {
      k.ajax({
    url: '/add_project_tag',
        data: { name: item.name },
    success:function(data) {
          k("#project_tags").tokenInput("add", {id: data, name: item.name});
          k("#project_tags").tokenInput("remove", {id: '0' });
        }
  });
    }
  }
});