首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails -将参数从视图传递到控制器

Rails -将参数从视图传递到控制器
EN

Stack Overflow用户
提问于 2015-05-18 18:59:02
回答 1查看 110关注 0票数 0

我正在尝试实现一个“设置”页面到我的网站。在此页面中,用户可以更改一些基本设置,例如他们的电子邮件和电子邮件订阅。现在,我只是想让他们能够取消订阅电子邮件。当第一次注册时,他们可以选择复选框,值存储在mysql数据库中。现在,我很难弄清楚如何从不同的页面更改它。下面是注册控制器的样子:

代码语言:javascript
复制
class SignUpsController < ApplicationController

  def index    
  end

  def new
    @user = SignUp.new
  end

  def cost
    return 10
  end

  def create

    @user = SignUp.new(sign_ups_params)

    if @user.save!
      UserMailer.welcome_email(@user).deliver

      flash[:notice] = "Thank you " + @user.first_name + ", account created     successfully."
      redirect_to(:controller => 'home')

    else
      flash[:error] = "something failed"
      redirect_to :back
    end
  rescue
    flash[:error] = "Failed to create user, email is taken or passwords do     not match"
    redirect_to :back
   end

  private
    def sign_ups_params
  params.require(:sign_ups).permit(:first_name, :last_name, :email,     :password, :password_confirmation, :subscription)
    end
end

这是注册页面视图的一部分,显示了我是如何填写和提交表单的:

代码语言:javascript
复制
<h3>Create New User</h3>

    <%= form_for(:sign_ups, :url => {:action => 'create'}) do |f| %>

    <table summary="Subject form fields">
      <tr>
        <th>First Name</th>
        <td><%= f.text_field(:first_name) %></td>
      </tr>
      <tr>
        <th>Last Name</th>
        <td><%= f.text_field(:last_name) %></td>
      </tr>
      <tr>
        <th>Email</th>
        <td><%= f.email_field(:email) %></td>

      </tr>
      <tr>
        <th>Password</th>
        <td><%= f.password_field(:password) %></td>
      </tr>
      <tr>
        <th>Password Conformation</th>
        <td><%= f.password_field(:password_confirmation) %></td>
      </tr>
      <tr>
        <th>Subscribe to email</th>
        <td><%= f.check_box(:subscription) %></td>
      </tr>

    </table>
    <input class="btn btn-primary" name="commit" type="submit" value="Create User"/>
  </div>

我已经为设置页面创建了一个“配置文件”视图和控制器,但我不确定这是不是正确的操作方式,或者我是否应该只使用“注册ups”控制器。提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2015-05-18 19:55:00

您可以也应该使用您的signups_controller,因为您希望赋予用户编辑其SignUp记录(或注册)的能力。

您只需要添加一些东西就可以使其工作。首先,在控制器中创建一个edit和一个update操作:

代码语言:javascript
复制
def edit
  @user = SignUp.find(params[:id])
end

def update
  @user = SignUp.find(params[:id])
  respond_to do |format|
    if @user.update(sign_up_params)
      # do this
    else
      # do that
    end
  end
end

还要将您的sign_ups_params重命名为其单数形式=> sign_up_params

和你相应的视图

代码语言:javascript
复制
views/sign_ups/edit.html.erb
<%= render 'form' %>

views/sign_ups/_form.html.erb
<%= form_for(@user, :url => {:action => 'update'}) do |f| %>
....

由于您的配置/routes.rb中可能有resources :sign_ups,因此您应该可以使用它了。

SignUpProfile分离可能会让事情变得更加困难,除非您以一种非常干净的方式使用像devise这样的gem (它可以做到这一点)。

您正在尝试更新哪个对象,或者哪个对象包含您要更新的属性?

如果您想要更新sign_up_params,请在您的SignUpsController中执行此操作,并按照错误提示添加您的update操作。但是,如果您需要更新profile_params,请在ProfilesController中执行此操作。

现在,您可能会看到其中的困惑。假设您正在查看某人的代码,看到了一个ProfilesController和一个SignUpsController create操作。

为什么不只有一个ProfilesController,其中sign_up是配置文件对象的create操作?

如果你把它保存在你的SignUpsController中,把editupdate都移到那里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30301418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档