gpt4 book ai didi

ruby-on-rails - Rails 中带有 text_field 的逗号分隔数组

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:24 24 4
gpt4 key购买 nike

我有一些用户可以有很多帖子,并且每个帖子都可以有很多标签。我已经使用帖子和标签之间的 has_and_belongs_to_many 关系实现了这一点。

创建新帖子时,用户可以使用逗号分隔的值列表对其进行标记(很像在 SO 上发布新问题时)。如果任何标签尚不存在,则应自动创建。这是帖子的 _fields.html.erb 部分内容:

<%= form_for @post do |f| %>
<%= render 'shared/error_messages', :object => f.object %>

<h1 class="post"><%= t(:new_post_message) %></h1>

<div class="field">
<%= f.label t(:title) %>
<br />
<%= f.text_field :title %>
</div>

<div class="field">
<%= f.label t(:tag).pluralize %>
<br />
<%= f.text_field :tags %>
</div>

<div class="field">
<%= f.label t(:text) %>
<br />
<%= f.text_area :content %>
</div>

<div class="actions">
<%= f.submit t(:post_verb) %>
</div>
<% end %>

现在使用 f.text_field :tags 会生成带有 [] 文本的输入元素。

我还没有在 posts_controller.rb 中使用标签,因为我不确定我应该如何从参数中获取和拆分字符串值:

def create
@post = current_user.posts.build(params[:post])
if @post.save
redirect_to root_path
else
@stream = []
render 'pages/home'
end
end

有没有人解决过这个问题?非常感谢。

最佳答案

我的偏好是在 post.model 上创建一个属性来读取标签。例如

app/models/post.rb

def tag_list
self.tags.map { |t| t.name }.join(", ")
end

def tag_list=(new_value)
tag_names = new_value.split(/,\s+/)
self.tags = tag_names.map { |name| Tag.where('name = ?', name).first or Tag.create(:name => name) }
end

然后在你看来你可以这样做:

<%= f.text_field :tag_list %>

代替:标签

post 模型将接受标签列表,拆分为标签名称,如果存在则查找标签,如果不存在则创建标签。不需要 Controller 逻辑。

编辑 这段代码当然依赖于你的标签模型有一个名为 name 的属性(如果不只是替换你存储标签“name”的任何属性),并且它在数据库(即您在标签模型中使用类似 validates_uniqueness_of :name 的东西)

关于ruby-on-rails - Rails 中带有 text_field 的逗号分隔数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8345273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com