私はProdutoと呼ばれるコントローラとProdutoというモデルを持っています。 Produtoのすべてのオブジェクトを、Produtoのコントローラと同じように変数に渡したいが、別のコントローラに渡したい。そのため、コントローラProdutoはIndex Defで@ Produto = Produto.allを使用し、このコントローラのビューはその変数を使用します。しかし、私は他のコントローラでこれをやりたい 私が持っているものを見て:なぜ私の変数がNilですか? - Ruby on Rails
Produtoコントローラ:
class ProdutosController < ApplicationController
before_action :set_produto, only: [:show, :edit, :update, :destroy]
# GET /produtos
# GET /produtos.json
def index
@produtos = Produto.all
end
def show
end
def new
@produto = Produto.new
end
def edit
end
def create
@produto = Produto.new(produto_params)
respond_to do |format|
if @produto.save
format.html { redirect_to @produto, notice: 'Produto was successfully created.' }
format.json { render :show, status: :created, location: @produto }
else
format.html { render :new }
format.json { render json: @produto.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @produto.update(produto_params)
format.html { redirect_to @produto, notice: 'Produto was successfully updated.' }
format.json { render :show, status: :ok, location: @produto }
else
format.html { render :edit }
format.json { render json: @produto.errors, status: :unprocessable_entity }
end
end
end
def destroy
@produto.destroy
respond_to do |format|
format.html { redirect_to produtos_url, notice: 'Produto was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_produto
@produto = Produto.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def produto_params
params.require(:produto).permit(:nome, :preco, :fornecedor_id)
end
end
ホームコントローラ(これは私がそれらのProdutoがProdutoコントローラと同じように、あまりにもオブジェクトを取りたいコントローラです):
class HomeController < ApplicationController
def index
@produtos = Produto.all
render "index"
end
def show
if session[:user]
@user = User.find(session[:user])
end
end
end
ホームの景色はこのコードの部分です:
<table>
<thead>
<tr>
<th>Nome</th>
<th>Preco</th>
<th>Fornecedor</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @produtos.each do |produto| %>
<tr>
<td><%= produto.nome %></td>
<td><%= produto.preco %></td>
<td><%= produto.fornecedor %></td>
<td><%= link_to 'Show', produto %></td>
<td><%= link_to 'Edit', edit_produto_path(produto) %></td>
<td><%= link_to 'Destroy', produto, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
と私は、このエラー取得しています:
未定義のメソッド `各」ゼロについて:NilClass <%の@ produtos.each行う | produtoを| (ルートルートである)
Rails.application.routes.draw do root 'login#new' get 'home#index' scope '/login' do get '/acesso', to:'login#new' post '/acessorecebendo', to:'login#create' get '/sair', to:'login#destroy' end resources :login resources :home resources :produtos resources :fornecedors end
ログインコントローラ::>
マイルート%
class LoginController < ApplicationController
skip_before_action :verify_authenticity_token
def new
if session[:user]
@user = User.find(session[:user])
end
end
def destroy
reset_session
redirect_to "/login/acesso", notice: "Você foi deslogado"
end
def create
user = User.validate(login_params[:email], login_params[:senha])
if user
session[:user] = user.id
redirect_to "/home/index", notice: "login feito com sucesso"
else
redirect_to "/login/acesso", notice: "Dados incorretos"
end
end
private
def login_params
params.require(:login).permit(:email, :senha)
end
end
どのビューが '@produtos.each'ですか? –
ホームコントローラのビューであるinicio.html.erbというビュー –
変数 '@produtos'をそこに作成する必要があります。この方法は、そのメソッドに応答するビューで利用できます。 –