我有一個名爲Produto的控制器和一個名爲Produto的模型。我想將所有Produto對象傳遞給Produto控制器執行的變量,但傳遞給另一個控制器。因此,控制器Produto在她的Index def中獲取@Produto = Produto.all,並且該控制器的視圖使用該變量。但我想在其他控制器中執行此操作。 看看我有:爲什麼我的變量是零? - 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',這種方式在視圖中可用,該視圖響應該方法。 –