class CommentsController < ApplicationController
before_action :set_post
def create
@comment = @post.comments.build(comment_params)
class ButtonComponent < ViewComponent::Base
VARIANTS = {
primary: "bg-blue-600 hover:bg-blue-700 text-white",
secondary: "bg-gray-200 hover:bg-gray-300 text-gray-900",
danger: "bg-red-600 hover:bg-red-700 text-white"
}.freeze
class CommentsController < ApplicationController
before_action :set_post
def new
@comment = @post.comments.build
end
<%= link_to 'Newest', posts_path(sort: 'new'), data: { turbo_frame: 'results', turbo_action: 'replace' } %>
<%= link_to 'Popular', posts_path(sort: 'popular'), data: { turbo_frame: 'results', turbo_action: 'replace' } %>
<%= turbo_stream.replace dom_id(@member, :follow_button) do %>
<%= render 'members/follow_button', member: @member %>
<% end %>
<%= turbo_stream.replace dom_id(@member, :followers_count) do %>
<%= render 'members/followers_count', member: @member %>
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["field", "status"]
static values = {
key: String,
<%= link_to 'Docs', 'https://turbo.hotwired.dev', target: '_blank', rel: 'noopener', data: { turbo: false } %>
import { Turbo } from "@hotwired/turbo-rails"
Turbo.StreamActions.redirect = function () {
const url = this.getAttribute("url")
if (!url) return
<%= link_to 'Delete', task_path(task),
data: { turbo_method: :delete, turbo_confirm: 'Delete this task?' },
class: 'text-red-700 hover:underline' %>
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["wrapper", "template", "anchor"]
add(event) {
<button
data-controller="optimistic-toggle"
data-optimistic-toggle-url-value="<%= post_star_path(post) %>"
data-optimistic-toggle-on-text-value="Starred"
data-optimistic-toggle-off-text-value="Star"
data-optimistic-toggle-on-class-value="bg-yellow-400"
class StepsController < ApplicationController
def move_up
@step = Step.find(params[:id])
@step.move_higher
respond_to do |format|