![](/img/trans.png)
[英]A seasoned programmer, confused on how to start coding a rails app from scratch
[英]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?
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.