3

나는 다른 사용자의 게시물을 편집 할 수있는 관리자 계정이 있습니다. 대부분 오타가 있습니다. 아래의 컨트롤러를 사용하면 current_user (내 경우에는 admin)에서 가져온 이후로 user_id가 업데이트되므로 내 계정으로 게시물이 업데이트되고 나에게 제출 된 게시물처럼 보입니다. 실제 사용자 ID를 덮어 씁니다.레일즈 5, 컨트롤러의 특정 양식 필드 업데이트하기

def update 
    respond_to do |format| 
     if @post.update(post_params) 
     format.html { redirect_to @post, notice: 'Post was successfully updated.' } 
     format.json { render :show, status: :ok, location: @post } 
     else 
     format.html { render :edit } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

은 BTW이 새로운 편집을 위해 모두 사용되는 내 _form.html.erb입니다.

<%= simple_form_for(@post) do |f| %> 
    <%= f.error_notification %> 

    <%= f.input :user_id, input_html: { value: current_user.id }, as: :hidden %> 
    <%= f.input :title, required: true, autofocus: true, placeholder: "Post title: *", label: false, input_html: { maxlength: 140, size: 40 } %> 
    <%= f.input :link, required: true, placeholder: "Post link: *", label: false, input_html: { maxlength: 300, size: 40 } %> 
    <%= f.input :description, placeholder: "Summary of the Post", label: false, input_html: { maxlength: 600, :rows => 5 } %> 

    <%= f.button :submit, "Post" %> 
<% end %> 

내 스키마

create_table "posts", force: :cascade do |t| 
    t.string "title" 
    t.string "link" 
    t.text "description" 
    t.integer "user_id" 
    t.string "slug" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["slug"], name: "index_posts_on_slug" 
    t.index ["user_id"], name: "index_posts_on_user_id" 
    end 

어떻게 USER_ID 업데이트를 건너 뛸 수 있습니다? 아래 코드를 사용하여 업데이트하려는 필드를 정의하려고했지만 작동하지 않습니다. 고맙습니다.

if @post.update(post_params[:title, :link, :description]) 
+0

또는'input_html 교체 : {값 : post.user_id.empty @? ? current_user.id : @ post.user_id}' – Hatik

+0

그것은 "Nil : NilClass"에 대한 정의되지 않은 메소드'user_id '를 제공합니다. 왜냐하면 그것은 새로운 게시물에 대한 것이 아니기 때문입니다. – Designer

답변

4

고맙습니다.

@post.title = post_params[:title] 
@post.link = post_params[:link] 
@post.description = post_params[:description] 

respond do 전에 넣어이와 if @post.update(post_params)if @post.save

+0

실제로 어디로 가고 있습니까? @ post.update ("here")에 들어갈 수 없으며 업데이트 라인 이전에 정의하면 업데이트에 어떻게 할당합니까? 감사합니다. – Designer

+0

수정 된 답변을 확인하십시오. –

+0

오! 하지만 .save가 실제로 업데이트하는 이유는 무엇입니까? – Designer