Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 On Rails 4_Acts As Taggable On - Fatal编程技术网

Ruby on rails 通过复选框添加标记

Ruby on rails 通过复选框添加标记,ruby-on-rails,ruby-on-rails-4,acts-as-taggable-on,Ruby On Rails,Ruby On Rails 4,Acts As Taggable On,我试图通过简单的表单复选框和gem上的acts as taggable将标签添加到帖子中。已经有一些问题了,但我还没有找到一个有效的方法。我想要以下标签选项:世界、政治、科技和体育 现在我的表格中有: <%= f.label :tag_list %> <%= f.check_box :tag_list, { :multiple => true }, 'world', nil %> <%= f.check_box :tag_list, { :multiple

我试图通过简单的表单复选框和gem上的acts as taggable将标签添加到帖子中。已经有一些问题了,但我还没有找到一个有效的方法。我想要以下标签选项:世界、政治、科技和体育

现在我的表格中有:

 <%= f.label :tag_list %>
<%= f.check_box :tag_list, { :multiple => true }, 'world', nil %>
<%= f.check_box :tag_list, { :multiple => true }, 'politics', nil %>
<%= f.check_box :tag_list, { :multiple => true }, 'tech', nil %>
<%= f.check_box :tag_list, { :multiple => true }, 'sports', nil %>
这是控制器:

 def index
  if params[:tag]
  @posts = Post.tagged_with(params[:tag])
 else
 @posts = Post.all
 end
end
以及以下观点:

<%= raw post.tag_list.map { |t| link_to t, tag_path(t) }.join(', ') %>


问题是,当我点击一个复选框时,它不会将该标记保存到帖子中。如果我使用标准的“添加您自己的标记,用逗号分隔”,一切都会正常工作。

这是因为参数[:tag\u list]由Rails转换为数组,因此不是acts\u as\u taggable\u on所期望的

我怀疑(在更新/创建控制器之前)在控制器中执行以下操作可能会解决问题:

  params[:tag_list] = params[:tag_list].join(", ")

这是因为param[:tag_list]由Rails转换为数组,因此不是acts_as_taggable_on所期望的

我怀疑(在更新/创建控制器之前)在控制器中执行以下操作可能会解决问题:

  params[:tag_list] = params[:tag_list].join(", ")

测试了这个表单,它对我很有用。不确定actsastaggaleon是否会将数组而不是字符串放入标记列表中,但它似乎可以很好地解析它

提交时您的参数看起来正确吗?即:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"blargh", "blog_post"=>{"tag_list"=>["tech", "sports"]}, "commit"=>"Update BlogPost", "id"=>"1"}

测试了这个表单,它对我很有用。不确定actsastaggaleon是否会将数组而不是字符串放入标记列表中,但它似乎可以很好地解析它

提交时您的参数看起来正确吗?即:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"blargh", "blog_post"=>{"tag_list"=>["tech", "sports"]}, "commit"=>"Update BlogPost", "id"=>"1"}

我使用强大的参数,所以我做了以下工作

假设您的模型是“Post”,将此方法添加到posts\u controller.rb文件中

def create
  params[:post][:tag_list] = params[:post][:tag_list].join(',')
  @post = Post.new(post_params)
  @post.save
end

private
  def post_params
    params.require(:post).permit(:title, :content, :tag_list)
  end
在posts/_form.html.haml中

= simple_form_for post, remote: true do |f|
  = f.error_notification
  = f.input :title
  = f.input :content
  = f.input :tag_list, as: :check_boxes, collection: ['tag1', 'tag2', 'tag3']
  = f.submit class: 'btn btn-primary'
  = link_to "Cancel", "#", class: 'btn', data: {dismiss: 'modal'}

我使用强大的参数,所以我做了以下工作

假设您的模型是“Post”,将此方法添加到posts\u controller.rb文件中

def create
  params[:post][:tag_list] = params[:post][:tag_list].join(',')
  @post = Post.new(post_params)
  @post.save
end

private
  def post_params
    params.require(:post).permit(:title, :content, :tag_list)
  end
在posts/_form.html.haml中

= simple_form_for post, remote: true do |f|
  = f.error_notification
  = f.input :title
  = f.input :content
  = f.input :tag_list, as: :check_boxes, collection: ['tag1', 'tag2', 'tag3']
  = f.submit class: 'btn btn-primary'
  = link_to "Cancel", "#", class: 'btn', data: {dismiss: 'modal'}

我知道已经有一段时间了,但我最近遇到了同样的问题,我想我应该发布我的解决方案。使用Rails 5.0.0并在上充当标记时,我遇到了完全相同的问题:当使用f.text_字段时,所有标记和标记都得到了很好的保存,但当我使用:multiple=>true更改为f.check_框时,什么都没有得到保存

该解具有强参数。因为text_字段提交的参数如下所示:

"blog_post"=>{"tag_list"=>"tech, sports"}
"blog_post"=>{"tag_list"=>["tech", "sports"]}
复选框表单提交的参数如下所示:

"blog_post"=>{"tag_list"=>"tech, sports"}
"blog_post"=>{"tag_list"=>["tech", "sports"]}
然后,我们需要从中编辑控制器中的强参数

params.require(:blog_post).permit(:foo, :tag_list)


允许提交的数组。

我知道已经有一段时间了,但我最近遇到了同样的问题,我想我应该发布我的解决方案。使用Rails 5.0.0并在上充当标记时,我遇到了完全相同的问题:当使用f.text_字段时,所有标记和标记都得到了很好的保存,但当我使用:multiple=>true更改为f.check_框时,什么都没有得到保存

该解具有强参数。因为text_字段提交的参数如下所示:

"blog_post"=>{"tag_list"=>"tech, sports"}
"blog_post"=>{"tag_list"=>["tech", "sports"]}
复选框表单提交的参数如下所示:

"blog_post"=>{"tag_list"=>"tech, sports"}
"blog_post"=>{"tag_list"=>["tech", "sports"]}
然后,我们需要从中编辑控制器中的强参数

params.require(:blog_post).permit(:foo, :tag_list)


允许提交的数组。

rails新增,但不确定这在控制器中的外观。我用我的控制器现在是什么编辑了这个问题。谢谢rails新手,不太确定这在控制器中会是什么样子。我用我的控制器现在是什么编辑了这个问题。谢谢是的,情人们看起来就是这样。嗯。你能发布你的整个控制器和相关视图吗?在提交前后,您的服务器日志中是否没有任何可疑内容?在问题中发布了视图。这是服务器日志:参数:{“utf8”=>“✓", "真实性令牌“=>blahblah”=”,“post”=>{“title”=>“test”,“country”=>“,“description”=>“test”,“tag\u list”=>[“sports”],“image\u remote\u url”=>“},“commit”=>“Add Event”}。至于控制器,这就是整个posts#index函数。如果有什么不同的话,该视图位于posts索引页调用的部分视图中。那么您的#更新呢?在那之后,您看到提交到数据库的事务了吗?没有回滚?在rails控制台中调用该对象时会发生什么?如果你已经设置了标记路径,那么这个视图应该可以工作。是的,参数看起来就是这样。嗯。你能发布你的整个控制器和相关视图吗?在提交前后,您的服务器日志中是否没有任何可疑内容?在问题中发布了视图。这是服务器日志:参数:{“utf8”=>“✓", "真实性令牌“=>blahblah”=”,“post”=>{“title”=>“test”,“country”=>“,“description”=>“test”,“tag\u list”=>[“sports”],“image\u remote\u url”=>“},“commit”=>“Add Event”}。至于控制器,这就是整个posts#index函数。如果有什么不同的话,该视图位于posts索引页调用的部分视图中。那么您的#更新呢?在那之后,您看到提交到数据库的事务了吗?没有回滚?在rails控制台中调用该对象时会发生什么?如果你设置了标记路径,这个视图应该可以工作。我喜欢这个方法。最后,我为my:create,:edit操作设置了一个“before_action”,以设置一个用于存储集合数组的变量。谢谢你的帮助!我喜欢这个方法。最后,我为my:create,:edit操作设置了一个“before_action”,以设置一个用于存储集合数组的变量。谢谢你的帮助!