簡體   English   中英

從Rails控制器返回值-困惑的Java程序員

[英]Return values from rails controller - confused Java programmer

Noobie Rails問題在這里。 我了解到,在不顯式編寫“ return ...”的情況下返回了ruby中的“最后求值的語句”。 以下示例(來自本教程Rails和Javascript

 class UsersController < ApplicationController
  def index
    @users = User.all
    @user = User.new
  end

現在在html.erb中,他們像這樣使用它

<ul id="users">
<% @users.each do |user| %>
  <%= render user %>
<% end %>
</ul>

因此,我不必顯式返回實例變量,在我的視圖中都可以使用它們(@users和@user)。 它是實例變量的唯一變量,還是局部變量也可能來自Java?

實例變量在視圖中始終可用。 您不需要返回任何東西。

這是有關如何將變量從控制器傳遞到視圖的很好的解釋:

Rails實例變量如何傳遞給視圖?

def index
  @users = User.all
  @user = User.new
  user_detail = get_user_info(@users.last)
end

這是控制器中的一個動作,實例化的實例變量將在視圖中可用。 考慮一下您有一個名為get_user_info方法的情況

def get_user_info(user)
  name = user.name
  email = user.email
end

user_detail將包含email的值,以上方法將默認返回最后一個值。

控制器方法不會將值返回到您的視圖。 而是將渲染的頁面返回到請求來自的瀏覽器。 只是一個慣例,即控制器會自動調用對同名模板的render調用。

您可以使用相同的行為像這樣編寫控制器方法:

class UsersController < ApplicationController
  def index
    @users = User.all
    @user = User.new

    return render 'index'
end

由於最后一個評估值是自動返回的,因此等效:

class UsersController < ApplicationController
  def index
    @users = User.all
    @user = User.new

    render 'index'
  end

而且由於控制器會自動調用相同名稱的渲染器,因此您可以將其完全刪除(除非模板的名稱與控制器方法的名稱不同)

class UsersController < ApplicationController
  def index
    @users = User.all
    @user = User.new
  end

控制器中有太多實例變量被認為是不好的做法,因此您可能還是想手動調用render並傳遞如下局部變量:

class UsersController < ApplicationController
  def index
    users = User.all
    user = User.new

    render 'index', :locals => { :all_users => users, :new_user => user }
  end

在前端訪問本地人:

<ul id="users">
  <% all_users.each do |user| %>
    <%= render user %>
  <% end %>
</ul>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM