Tag refinements
- Don’t allow duplicates - Allow edits correctly
This commit is contained in:
parent
6358e2a61e
commit
d5b587499c
|
@ -17,7 +17,7 @@ class MicropostsController < ApplicationController
|
|||
def create
|
||||
micropost = Micropost.new(micropost_params)
|
||||
micropost.user = helpers.current_user
|
||||
micropost.add_tags(params[:tags])
|
||||
micropost.set_tags(params[:tags]) if params[:tags]
|
||||
if micropost.save
|
||||
redirect_to micropost, notice: t(".created")
|
||||
else
|
||||
|
@ -30,6 +30,7 @@ class MicropostsController < ApplicationController
|
|||
def edit; end
|
||||
|
||||
def update
|
||||
@micropost.set_tags(params[:tags]) if params[:tags]
|
||||
if @micropost.update(micropost_params)
|
||||
redirect_to @micropost, notice: t(".updated")
|
||||
else
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module MicropostsHelper
|
||||
def tag_string(micropost)
|
||||
micropost.tags.map(&:name).join(" ")
|
||||
end
|
||||
end
|
|
@ -11,9 +11,10 @@ class Micropost < ApplicationRecord
|
|||
has_many :microposts_tags
|
||||
has_many :tags, through: :microposts_tags
|
||||
|
||||
def add_tags(*tag_names)
|
||||
tag_names.each do |tag|
|
||||
tags << Tag.find_or_create_by(name: tag)
|
||||
def set_tags(*tag_names)
|
||||
tag_names.each do |tag_name|
|
||||
tag = Tag.find_or_create_by(name: tag_name)
|
||||
tags << tag unless tags.include?(tag)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
<%= f.rich_text_area :content %>
|
||||
|
||||
<%= text_field_tag :tags %>
|
||||
<%= text_field_tag :tags, tag_string(@micropost) %>
|
||||
|
||||
<%= f.submit button_text %>
|
||||
<% end %>
|
||||
|
|
|
@ -21,7 +21,17 @@ class MicropostTest < ActiveSupport::TestCase
|
|||
test "can add tags" do
|
||||
assert_empty @micropost.tags
|
||||
assert_difference "@micropost.tags.count", +3 do
|
||||
@micropost.add_tags("foo", "bar", "baz")
|
||||
@micropost.set_tags("foo", "bar", "baz")
|
||||
end
|
||||
end
|
||||
|
||||
test "duplicate tags are not added" do
|
||||
assert_empty @micropost.tags
|
||||
assert_difference "@micropost.tags.count", +3 do
|
||||
@micropost.set_tags("foo", "bar", "baz")
|
||||
end
|
||||
assert_no_difference "@micropost.tags.count" do
|
||||
@micropost.set_tags("bar", "baz")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue