如何通过一个return值的操作来查看?

How to pass a return value of operation to view?

我花了很多时间,仍在尝试弄清楚如何将操作结果 (return) 传递到我的视图。关于文档,我在概念文件夹中创建了单元格、操作和视图文件夹。我正在使用搜索应用程序,这是我的 cell/show.rb

module Search::Cell
  class Show < Trailblazer::Cell
  end
end

这里是view/show.rb

<h1> Hello! </h1>
#how to pass result here?
<a href="/search">Return back</a>

我的operation/show.rb

require "trailblazer/operation"

module Search::Operation
  class Show < Trailblazer::Operation
    step    :hello_world!
    fail    :log_error

    def hello_world!(options, search_word)
      puts "Hello, Trailblazer!"
      search_word = search_word[:params]
      search_word.downcase!
      true
    end

    def log_error
      p "Some error happened!!"
      true
    end
  end
end

和search_controller.rb

class SearchController < ApplicationController
  def index
    search_word = params[:text]
    if search_word.present?
      Search::Operation::Show.(params: search_word)
      render html: cell(Search::Cell::Show).()
    else
      render html: cell(Search::Cell::Index).()
    end
  end 
end

我应该使用哪个变量或方法来传递操作结果(hello_world!要查看的方法?我尝试了不同的东西(听说过一些关于 ctx 变量的信息,也尝试过常见的实例变量 rails app) 和 pry 调试了很多都没有解决。请帮助我!

根据 docs,您似乎有两个选择。

  1. 将您的操作结果作为 "model" 传递,并通过可在单元格模板中访问的模型变量访问它。
    class SearchController < ApplicationController
      def index
        search_word = params[:text]
        if search_word.present?
          result = Search::Operation::Show.(params: search_word)
          render html: cell(Search::Cell::Show, result)
        else
          render html: cell(Search::Cell::Index)
        end
      end 
    end

然后在您的模板中,假设您使用的是 ERB:

    <h1> Hello! </h1>
    The result is <%= model %>
    <a href="/search">Return back</a>
  1. 在上下文中传递您的操作结果,并通过单元格 class 中定义的方法访问它。
    class SearchController < ApplicationController
      def index
        search_word = params[:text]
        if search_word.present?
          result = Search::Operation::Show.(params: search_word)
          render html: cell(Search::Cell::Show, nil, result: result)
        else
          render html: cell(Search::Cell::Index)
        end
      end 
    end

然后在您的单元格中 class:

    module Search::Cell
      class Show < Trailblazer::Cell
        def my_result
          #here is the logic you need to do with your result
          context[:result]
        end
      end
    end

然后在您的模板中,假设您使用的是 ERB:

    <h1> Hello! </h1>
    The result is <%= my_result %>
    <a href="/search">Return back</a>