传递一个实例变量从模型到视图
你好(希望)无所不知Rails的人;)传递一个实例变量" title="实例变量">实例变量从模型到视图
我目前正在试图生成一个实例变量一组单选按钮在我的车型之一。由于MVC模式禁止将模型中的数据直接传递到视图中,因此我不得不将控制器作为一种中间人。问题是我无法访问我的模型的实例变量,即使我使用'attr_reader:valid_statuses'。因此,也不可能将数据传递给我的视图...
这就是我目前的用户模型。 '@valid_statuses'数组包含应该用于生成单选按钮的字符串。
class User < ApplicationRecord attr_reader :valid_statuses
@valid_statuses = %w(new editor admin blocked)
validates :status, inclusion: { in: @valid_statuses }
end
控制器看起来像这样。 @user不是nil,但@valid_statuses是
class UsersController < ApplicationController ...
def set_user
@user = User.find(params[:id])
@valid_statuses = @user.valid_statuses
end
...
end
的_form.html.erb:
<div class="field"> <%= f.label :status %>
<% @valid_statuses.each do |item| %>
<%= f.radio_button :status, item %> <%= item %><br />
<% end %>
</div>
如果有人知道这个问题的答案,并能与我分享它,我会很greateful剩下的世界!谢谢!
回答:
在这种情况下,你必须使用常量(如果你想只解决您的代码):
型号:
class User < ApplicationRecord VALID_STATUSES = %w(new editor admin blocked)
validates :status, inclusion: { in: VALID_STATUSES }
end
控制器:
class UsersController < ApplicationController ...
def set_user
@user = User.find(params[:id])
end
...
end
观点:
<div class="field"> <%= f.label :status %>
<% User::VALID_STATUSES.each do |item| %>
<%= f.radio_button :status, item %> <%= item %><br />
<% end %>
</div>
但我最好还是使用enum
与名status
:
型号:
class User < ApplicationRecord enum status: [:new, :editor, :admin, :blocked]
end
READ NORE ABOUT ENUMs
回答:
有效状态不会从一个用户更改为另一个用户。
因此您在类User中定义了@valid_statuses
。 @valid_statuses
未针对特定@user
定义,而是针对整个班级。 attr_reader :valid_statuses
试图找到尚未定义的@user
的实例变量@valid_statuses
。
这里是一个可能的修改:
,并在您的观点:
User.valid_statuses
以上是 传递一个实例变量从模型到视图 的全部内容, 来源链接: utcz.com/qa/263894.html