以下是我的会员模特的一部分:
belongs_to :team
validates :role, inclusion: { in: %w(administrator visitor player),
message: "%{value} is not a valid size" }, allow_nil: true
validates :email, presence: true, uniqueness: true, on: :create
validates :team, presence: true, :if => "member.role=player?"
我想让一个角色不是玩家的成员可以在不给团队的情况下订阅,但我写的代码似乎不起作用。
另外,如果只有用户选择角色中的玩家,是否可以显示团队字段?
这是成员的形式:
<div class="field">
<%= f.label :email %><br>
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.select :role, ['visitor','administrator','player'] %>
</div>
<div class="field">
<%= f.label :team_id %><br>
<%= f.number_field :team_id %>
</div>
答案 0 :(得分:1)
validates :team, presence: { if: :player? }
def player?
role == "player"
end
至于显示字段,它只是一些javascript,它与RoR没有任何关系。默认情况下隐藏该字段,并在角色选择字段上添加在change
上触发的事件。根据值,显示或隐藏团队字段。
答案 1 :(得分:0)
对于您的表单,我还会推荐一些Javascript,就像我在下面所做的那样:
<script type="text/javascript">
$(document).ready(function() {
// Hide the div when the page is loaded
$('#team_field').hide();
// Install a change handler to unhide the div if the user selects other than
// what you want
$('#player_type_select_box').change(function() {
var val = this.value;
if (val == 1 || val == 2) {
// Hide the other input
$('#team_field').hide();
} else {
// Unhide
$('#team_field').show();
}
});
});
</script>
就像Robin所说,这与RoR无关,可以通过一些快速编写脚本来解决。页面加载时,您隐藏该字段。当用户选择他们所属的成员类型时,如果该值不是您想要的值,则将其隐藏起来。否则,揭示隐藏的div。