0

我有许多具有一种状态的用户。由于某种原因,我无法使用状态控制器中的创建操作来保存状态。我认为问题在于有一个关联,因为我是新手,但我可能很容易出错。

这现在是工作代码。

用户模型:

 has_one :status, dependent: :destroy

状态模型:

attr_accessible :content
belongs_to :user
validates :user_id, presence: true
validates :content, presence: true, length: { maximum: 250 }

状态控制器:

def create
@new_status = current_user.build_status(param[:status])
  if @new_status.save
    flash[:success] = "Status posted!"
    redirect_to :back
  else
    flash[:error] = "Status couldn't save"
    redirect_to :back
  end
end

用户控制器:

def show
  @user = User.find(params[:id])
  @status = @user.status
  @new_status = current_user.build_status
end

用户/节目:

<%= render 'shared/status_form' if @user == current_user %>

共享/状态表格:

<%= form_for[@new_status], :url => user_status_path(current_user) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_area :content, id:"status_box", placeholder: "Status?" %>
  </div>
  <%= f.submit "Update", id:"status_btn", class: "btn btn-small btn-primary" %>
<% end %>

路线:

resources :users do
  resource :status, only: [:create, :destroy]
end

我知道这有很多东西要看,但我真的很感谢你的帮助,谢谢。

4

3 回答 3

1

我可以看到您的代码存在一些问题。

  1. 你正在交换@usercurrent_user。这有什么原因吗?您正在为通过 params[:id] 检索的用户生成状态表单,但在您的 create 方法中,您StatusController总是试图创建当前用户的状态。这两个用户不一样。
  2. 在该create方法中,您尝试保存一个新建的状态实例,除了用户关联之外,它是空的。这应该会导致针对content.

尝试这样的事情(尚未测试,但应该给你一个良好的开端):

路线.rb:

resources :users do
  resource :status, only: [:create, :destroy]
end

状态/_form.html.erb:

<%= form_for [@user, @status] do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_area :content, id:"status_box", placeholder: "Status?" %>
  </div>
  <%= f.submit "Update", id:"status_btn", class: "btn btn-small btn-primary" %>
<% end %>

状态控制器:

def create
  @status = Status.new(params[:status])
  if @status.save
    flash[:success] = "Status updated!"
    redirect_to :back
  else
    flash[:error] = "Status didn't save"
    redirect_to :back
  end
end

如果您有任何问题,请告诉我,以便我们制定解决方案。另一件事是您可能会考虑与 User 实例一起创建状态关联(即,如果用户始终应该具有状态)。这样,您始终可以参考@user.status而不是在控制器方法中构建一个。

于 2013-01-25T11:10:36.333 回答
0

您不应该调用 status 而不是 build_status 吗?

@status = current_user.status

因为这种关系命名了字段

has_one :状态

于 2013-01-25T11:03:07.477 回答
0

缺少要设置的参数

@new_status = current_user.build_status(params[:status])

于 2013-01-25T11:55:36.850 回答