Rails - 如何在视图中引用命名空间 table 属性
Rails - how to reference namespaced table attributes in views
我正在尝试学习如何在我的 Rails 5 应用程序中使用命名空间。
我有一个组织模型,我也在文件夹名"stance"下制作了一系列嵌套模型。其中一个模型称为概览。
协会是:
Organisation.rb
has_one :overview, class_name: Stance::Overview
accepts_nested_attributes_for :overview, reject_if: :all_blank, allow_destroy: true
姿态::概览
class Stance::Overview < ApplicationRecord
belongs_to :organisation, inverse_of: :overview
我的姿态资源控制器嵌套在名为 stance 的文件夹下。
我的路线是:
namespace :stance do
resources :overviews
end
在我的部分立场视图中,我试图从概览中渲染属性 table。
我试过:
<p><%= @overview.internal_explanation %></p>
<p><%= @stance_overview.internal_explanation %></p>
<p><%= @stance.overview.internal_explanation %></p>
<p><%= @stance::overview.internal_explanation %></p>
我想在我的组织展示中展示这个部分。我正在尝试这样做:
<%= render 'stance/overviews/internal', overview: @overview %>
但我不知道如何访问概览 table。我需要在关联中添加对 'stance' 的引用吗?
我可以看到在控制台中我需要写:
o = Stance::Overview.create(internal_explanation: "test")
o = Stance::Overview.first
但我看不到如何在代码中使用它。
我在控制台看到有这个属性的记录。
架构中 table 的名称是 "stance_overview"。
我的组织控制器有:
class OrganisationsController < ApplicationController
before_action :set_organisation, only: [:show, :edit, :update, :destroy]
def index
@organisations = Organisation.all
end
def show
end
def new
@organisation = Organisation.new
@organisation.build_overview
end
def edit
@organisation.build_overview unless @organisation.overview
end
def create
@organisation = Organisation.new(organisation_params)
respond_to do |format|
if @organisation.save
format.html { redirect_to @organisation, notice: 'Organisation was successfully created.' }
format.json { render :show, status: :created, location: @organisation }
else
format.html { render :new }
format.json { render json: @organisation.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @organisation.update(organisation_params)
format.html { redirect_to @organisation, notice: 'Organisation was successfully updated.' }
format.json { render :show, status: :ok, location: @organisation }
else
format.html { render :edit }
format.json { render json: @organisation.errors, status: :unprocessable_entity }
end
end
end
def destroy
@organisation.destroy
respond_to do |format|
format.html { redirect_to organisations_url, notice: 'Organisation was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_organisation
@organisation = Organisation.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def organisation_params
params.fetch(:organisation, {}).permit(:title, :comment,
overview_attributes: [:internal_explanation, :external_explanation ]
)
end
end
我还尝试将组织的强参数定义为:
stance_overview_attributes: [:internal_explanation, :external_explanation ]
我不断收到一条错误消息:
undefined method `internal_explanation' for nil:NilClass
任何人都可以向我推荐材料以帮助我了解如何在我的应用程序中使用名称空间。我试图了解它的基本原理,以便我可以积累一些知识。我通过反复试验找到了东西,但不了解实际需要什么(尽管在这种情况下,none 我的尝试正在解决)。
当您不在 Stance
命名空间中工作时,要访问 Overview
模型 (table),您必须使用 Stance::Overview
。例如,如果在 Stance
命名空间中的控制器中工作,您可以仅使用 Overview
进行访问。
要从关系中获取访问权限,您不需要任何额外的符号,只需 @organisation.overview
。
如果我对你的理解正确,你必须将你的部分声明为
<%= render 'stance/overviews/internal', overview: @organisation.overview %>
并且在部分中你必须使用 overview
而没有 @
。
我正在尝试学习如何在我的 Rails 5 应用程序中使用命名空间。
我有一个组织模型,我也在文件夹名"stance"下制作了一系列嵌套模型。其中一个模型称为概览。
协会是:
Organisation.rb
has_one :overview, class_name: Stance::Overview
accepts_nested_attributes_for :overview, reject_if: :all_blank, allow_destroy: true
姿态::概览
class Stance::Overview < ApplicationRecord
belongs_to :organisation, inverse_of: :overview
我的姿态资源控制器嵌套在名为 stance 的文件夹下。
我的路线是:
namespace :stance do
resources :overviews
end
在我的部分立场视图中,我试图从概览中渲染属性 table。
我试过:
<p><%= @overview.internal_explanation %></p>
<p><%= @stance_overview.internal_explanation %></p>
<p><%= @stance.overview.internal_explanation %></p>
<p><%= @stance::overview.internal_explanation %></p>
我想在我的组织展示中展示这个部分。我正在尝试这样做:
<%= render 'stance/overviews/internal', overview: @overview %>
但我不知道如何访问概览 table。我需要在关联中添加对 'stance' 的引用吗?
我可以看到在控制台中我需要写:
o = Stance::Overview.create(internal_explanation: "test")
o = Stance::Overview.first
但我看不到如何在代码中使用它。
我在控制台看到有这个属性的记录。
架构中 table 的名称是 "stance_overview"。
我的组织控制器有:
class OrganisationsController < ApplicationController
before_action :set_organisation, only: [:show, :edit, :update, :destroy]
def index
@organisations = Organisation.all
end
def show
end
def new
@organisation = Organisation.new
@organisation.build_overview
end
def edit
@organisation.build_overview unless @organisation.overview
end
def create
@organisation = Organisation.new(organisation_params)
respond_to do |format|
if @organisation.save
format.html { redirect_to @organisation, notice: 'Organisation was successfully created.' }
format.json { render :show, status: :created, location: @organisation }
else
format.html { render :new }
format.json { render json: @organisation.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @organisation.update(organisation_params)
format.html { redirect_to @organisation, notice: 'Organisation was successfully updated.' }
format.json { render :show, status: :ok, location: @organisation }
else
format.html { render :edit }
format.json { render json: @organisation.errors, status: :unprocessable_entity }
end
end
end
def destroy
@organisation.destroy
respond_to do |format|
format.html { redirect_to organisations_url, notice: 'Organisation was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_organisation
@organisation = Organisation.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def organisation_params
params.fetch(:organisation, {}).permit(:title, :comment,
overview_attributes: [:internal_explanation, :external_explanation ]
)
end
end
我还尝试将组织的强参数定义为:
stance_overview_attributes: [:internal_explanation, :external_explanation ]
我不断收到一条错误消息:
undefined method `internal_explanation' for nil:NilClass
任何人都可以向我推荐材料以帮助我了解如何在我的应用程序中使用名称空间。我试图了解它的基本原理,以便我可以积累一些知识。我通过反复试验找到了东西,但不了解实际需要什么(尽管在这种情况下,none 我的尝试正在解决)。
当您不在 Stance
命名空间中工作时,要访问 Overview
模型 (table),您必须使用 Stance::Overview
。例如,如果在 Stance
命名空间中的控制器中工作,您可以仅使用 Overview
进行访问。
要从关系中获取访问权限,您不需要任何额外的符号,只需 @organisation.overview
。
如果我对你的理解正确,你必须将你的部分声明为
<%= render 'stance/overviews/internal', overview: @organisation.overview %>
并且在部分中你必须使用 overview
而没有 @
。