首页 > 解决方案 > 如何在 Rails 中获取必要的数据

问题描述

如何在 Rails 中获取必要的数据

在此处输入图像描述

http://localhost:3000/terms/1/phrases_terms

过去,我检索到以下数据:

模型短语术语:

id, term_id, phrases_id

模型术语:

id , word, reding, meading

示范短语:

id , sentence

短语_术语_控制器.rb

 before_action :authenticate_user!
  before_action :set_term

  def index
    @phrases_terms = @term.phrases_terms
  end

  def new
    @phrases_term = PhrasesTerm.new
  end

  def create
    @phrases_term = @term.phrases_terms.new(phrases_term_params)
    if @phrases_term.save
      redirect_to term_phrases_terms_path(@term, @phrases_term), notice: "Phrases_Term was successfully created"
    else
      render "new"
    end
  end

  private

  def phrases_term_params
    params.require(:phrases_term).permit(:term_id, :phrase_id)
  end

  def set_term
    @term = Term.find(params[:term_id])
  end
end

index.html.erb

<% @phrases_terms.each do |phrases_term| %>
      <tr>
        <td><%= phrases_term.id %></td>
        <td><%= phrases_term.term_id %></td>
        <td><%= phrases_term.phrase_id %></td>
      </tr>
<% end %>

我现在想得到的是“词”的“词”值和“短语”的“句子”x

架构.rb

create_table "phrases_terms", force: :cascade do |t|
    t.integer "phrase_id"
    t.integer "term_id"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["phrase_id"], name: "index_phrases_terms_on_phrase_id"
    t.index ["term_id"], name: "index_phrases_terms_on_term_id"
end

路线.rb

 resources :terms do
    resources :phrases_terms, only: [:index, :create, :new]
 end

标签: ruby-on-railsrubyactiverecordruby-on-rails-5

解决方案


为避免 N+1 查询,在控制器中使用

def index
  @phrases_terms = @term.phrases_terms
end

然后在视图中

<% @phrases_terms.each do |phrases_term| %>
  <tr>
    <td><%= phrases_term.id %></td>
    <td><%= phrases_term.term.word %></td>
    <td><%= phrases_term.phrase.sentence %></td>
  </tr>
<% end %>

推荐阅读