传递一个实例变量从模型到视图

你好(希望)无所不知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

回到顶部