我暂时没有使用过Rails,而且我想要清理它。
因此@
符号表示,该控制器视图中可以访问特定的变量。正确的吗?
如果我有路线的意思
get '/admin/user:id' to: 'admin#user'
这意味着无论何时,只要我去路线,它就会前往路线'/admin/user:id'
然后它将有权访问该控制器中的所有@variables
。正确的吗?
现在这是一个小问题,在JavaScript中通常是一个简单的if-statement
。
例如,假设我有一个User
模型,并希望向好友Friend
,.first_name
,{显示一个小last_name
个列表{1}}。我只需要做
admins_controller
favourite_food
然后在我的观看中有类似
的内容def user
@user = user.find_by(:id => params[:id])
end
我的问题是如果他们没有朋友,我想将所有内容设置为" N / A"。这就是我在控制器中的用法。
<h1><%= @user.name %>'s Friends List</h1>
<table>
<tr><%= @user.user_friends.first.friend.first_name %></tr>
<tr><%= @user.user_friends.first.friend.last_name %></tr>
<tr><%= @user.user_friends.first.friend.favourite_food %></tr>
</table>
我想我可以创建另一个def user
@user = user.find_by(:id => params[:id])
if @user.friends.nil?
@user.user_friends.first.friend.name = "N/A"
@user.user_friends.first.friend.name = "N/A"
@user.user_friends.first.friend.name = "N/A"
end
end
,但我认为这是一种更好的方法,因为创建不必要的宽范围变量并不好。
答案 0 :(得分:1)
此逻辑属于视图,执行类似此操作
public void onServiceConnected() {
AccessibilityServiceInfo asi = new AccessibilityServiceInfo();
asi.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
asi.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
if (Build.VERSION.SDK_INT >= 16) {
asi.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
}
setServiceInfo(asi);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getPackageName() != null) {
//my code
}
}
答案 1 :(得分:1)
就个人而言,我在这种情况下使用presenter
模式。因此,在您的控制器中,您可以执行以下操作:
def user
@user = user.find_by(:id => params[:id])
@user_presenter = UserPresenter.new(self)
end
然后在你看来你会做类似的事情:
<h1><%= @user.name %>'s Friends List</h1>
@user_presenter.friends_list
我喜欢这样做,因为:
UserPresenter
尊重friends_list
界面)Presenters
都是PORO)比测试各种Rails组件(控制器,视图等)要容易得多。演示者有一个很好的RailsCast。
答案 2 :(得分:1)
在该域中,您有两个实体:UserWithFriends和UserWithoutFriends。所以你需要创建一个UserFactory
class UserWithFriends < User
def initialize(user)
@user = user
end
def friend_first_name
@user.friends.first.first_name
end
def friend_last_name
@user.friends.first.last_name
end
def friend_favourite_food
@user.friends.first.favourite_food
end
end
class UserWithoutFriends < User
def initialize(user)
@user = user
end
def friend_first_name
"N/A"
end
def friend_last_name
"N/A"
end
def friend_favourite_food
"N/A"
end
end
class UserFactory
def initialize(user)
@user = user
end
def create
if @user.friends.any?
UserWithFriends(@user).new
else
UserWithoutFriends(@user).new
end
end
end
在控制器中
def user
@user = UserFactory.new(user.find_by(:id => params[:id])).create
end
所以,在视图中你只需要
<h1><%= @user.name %>'s Friends List</h1>
<table>
<tr><%= @user.friend_first_name %></tr>
<tr><%= @user.friend_last_name %></tr>
<tr><%= @user.friend_favourite_food %></tr>
</table>
答案 3 :(得分:0)
我将使用三元运算符将该逻辑直接放在视图上,如下所示:
<table>
<tr><%= @user.user_friends.nil? ? "N/A" : @user.user_friends.first.friend.first_name %></tr>
<tr><%= @user.user_friends.nil? ? "N/A" : @user.user_friends.first.friend.last_name %></tr>
<tr><%= @user.user_friends.nil? ? "N/A" : @user.user_friends.first.friend.favourite_food %></tr>
</table>
让你的控制器保持苗条:
def user
@user = user.find(params[:id])
end