【问题标题】:Handling Rails form_for in a view not connected to the form_for controller.在未连接到 form_for 控制器的视图中处理 Rails form_for。
【发布时间】:2016-04-18 21:37:49
【问题描述】:

所以过了一段时间,有点头疼。我能够使Rails 版本化的表单正常工作。虽然我能够让它工作,但我不知道这是否是最佳做法,因为它感觉有点不对劲。我有一个网站,上面有一个用于在登录页面上注册的表格。登陆页面是static_pages#home。我为我的用户控制器 _new.html.erb 创建了一个部分,它已包含在我的登录页面中。这是我的表格:

<!-- Main Form -->
<div class="login-form-1">
  <!-- <form id="register-form" class="text-left"> -->
    <div class="login-form-main-message"></div>
    <div class="main-login-form">
      <div class="login-group">
        <%= form_for(@user) do |f| %>
        <div class="form-group">
          <%= f.text_field :first_name, :class => "form-control", :placeholder => "First Name" %>
        </div>
        <div class="form-group">
          <%= f.text_field :last_name, :class => "form-control", :placeholder => "Last Name" %>
        </div>
        <div class="form-group">
          <%= f.text_field :user_name, :class => "form-control", :placeholder => "User Name" %>
        </div>
        <div class="form-group">
          <%= f.email_field :email, :class => "form-control", :placeholder => "Email" %>
        </div>
      </div>
      <button class="login-button"><%= f.submit "", :class => "remove-button" %></button>
      <% end %>
    </div>
    <div class="etc-login-form">
      <p>already have an account? <a href="#">login here</a></p>
    </div>
  <!-- </form> -->
</div>
<!-- end:Main Form -->

这有点乱,因为我添加了很多样式。需要注意的是我如何呈现form_for。我已将@user 的对象传递给它。通常这个@user 可以在Users#new 动作中找到;然而,让这个表单正常运行的唯一方法是让Static_pages#home 通过设置@user = User.new 来处理它。这样做似乎不正确,但是,我似乎找不到更好的解决方法。最初,我要做的就是在提交时拥有此表单,点击Users#create 操作。我试过传递form_for (:user, :users, "/users"),但是当我尝试这个时,它会尝试触发Static_pages#create 动作。

总而言之,我的问题围绕着这是否是处理此问题的正确方法,如果不是,那将是更合适的方法。同样,我能够让它工作,但这是通过每次访问我的登录页面 Static_pages#home 时设置 @user = User.new 来实现的。感谢您花时间回答这个问题。

【问题讨论】:

    标签: ruby-on-rails ruby forms model-view-controller


    【解决方案1】:

    这没关系,完全可以接受。我什至很想写form_for User.new

    请记住,在大多数“现实”页面中,可以找到超过 1 个资源。例如。关于页面上的登录表单,帖子页面上的标签云,因此控制器可能需要检索超过一种类型的对象。

    理论上,如果您的页面由不连贯/独立的区域组成(例如,1 个区域=一个帖子及其 cmets,另一个是最近的 cmets 列表),您也可以考虑使用cells

    【讨论】:

    • 我会保留 @user = User.new 以便可以引用新实例化的对象。
    • 是的,在我看来,为了维护 MVC 模型,我想远离User.new。到目前为止,很好的建议,谢谢。
    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多